1. 程式人生 > >CF891C Envy 最小生成樹/虛樹

CF891C Envy 最小生成樹/虛樹

col targe 傳送門 就是 重要 -s 爆炸 margin bsp

正解:最小生成樹/虛樹

解題報告:

傳送門!

sd如我就只想到了最暴力的想法,一點兒優化都麻油想到,,,真的菜到爆炸了QAQ

然後就分別港下兩個正解QAQ

法一,最小生成樹

這個主要是要想到關於最小生成樹的性質

關於最小生成樹,有這麽一個性質,就是說,對於任意一種最小生成樹的方案,將邊權排序得到的序列都是相等的

挺顯然的不證了,結合kruscal的過程意會下QAQ

但其實我jio得並不重要,,,其實直接想著全程模擬kruscal的過程就好了QwQ

假如現在在模擬kruscal的過程,已經從小到大加邊加到這兒了

然後考慮怎麽樣就是布星的呢,依然結合kruscal的性質,如果邊兩端在同一個聯通塊中它就不應該被選擇

也就是說如果給定的邊的兩端在同一個聯通塊中說明不成立

否則一定是成立的,因為它是符合kruscal的生成過程的

然後最後說下從小到大加邊這個事兒,其實它是不需要像普通的kruscal一樣判斷在不在一個塊內部的,直接連上就好

原因非常簡單,如果不在一個塊肯定要連上,如果在一個塊內反正也不連白不連嘛,連上不可能讓局面更劣,所以就把邊權小於當前枚舉邊權的邊的兩端連起來就好了QwQ

然後關於這裏還有一個就,這個要做很多次,所以有兩個方法分別港下

第一種就想著開個可持久化並查集嘛,所以不能路徑壓縮,用個按秩合並

第二種有點兒巧妙,是這樣兒的,考慮先把所有邊按邊權排序,因為不同邊權之間互不影響,所以可以預處理出每條邊在連完所以邊權小於它的邊之後它的兩端從屬於哪兩個塊,這樣就相當於是每次重新構造了一個並查集,就歐克辣QwQ

等下放代碼QAQ?

法二,虛樹+樹上倍增st表

umm,,,

dbq我太菜了還麻油get這個,,,等get了再來寫QAQ

CF891C Envy 最小生成樹/虛樹