ZOJ 3261 並查集倒序操作

2022-03-03 16:13:11 字數 1211 閱讀 6492

剛開始感覺要並查集刪除節點這樣的操作,但是開闢的空間會大。去找題解,都是並查集的離線操作。

於是就自己去用離線操作做一下。

雖然a了,但是感覺還是刪除好啊!!

萬一題目有要破壞兩次咧!!

比如:

2

10 20

10 1

5query 0

destroy 0 1

query 0

destroy 0 1

query 0

這樣得出的答案,顯然錯誤。但是這道題的題意就是破壞了就沒有了,不能再破壞了。

對於這種情況,只需要在,seek處進行小操作。

但是這道題目不需要,qwq。

1 #include2 #include3

using

namespace

std;

4const

int maxn=10006;5

intfa[maxn],val[maxn];

6struct

nodefir[maxn*2],sec[maxn*5];9

int ans[maxn*5

];10 map >seek;

11int find_fa(int x)

12void add_edge(int a,int

b)1321}

22int

main()

2332

seek.clear();

33int

m;34 scanf("

%d",&m);

35for(int i=0;i)

38int

num;

39 scanf("

%d",&num);

40for(int i=0;i)

47else

if(str[0]=='d'

)53}54

for(int i=0;i)

58for(int i=num-1;i>=0;i--)

62else66}

67for(int i=0;i)

68if(sec[i].c==0) printf("

%d\n

",ans[i]);69}

70return0;

71 }

逆向並查集(ZOJ 3261)

與並查集不同,給出乙個圖中原有的一些邊,然後給出操作,操作不是向圖中新增邊,而是在已有的邊上,將邊刪除。對於該種情況,需要把首先讀入所有操作,把要求刪除的邊全部刪除,再按照從後往前的順序處理操作,這樣刪邊操作又重新轉化為了添邊的操作。例題 zoj3261 connections in galaxy ...

zoj3261變形並查集

需要變形的並查集,這題錯了好久,一直沒a掉,終於在重寫第三次的時候a了 先儲存資料,把不需要拆分的邊合併,逆向計算,需要拆分時就合併,之前不知道為啥寫搓了,tle好久 include include include include include include include include in...

zoj 3261 逆向並查集

很明顯是逆向的並查集,建立邊再銷毀,思路也很巧妙的逆向思考 如果正著一一銷毀,相當於倒著一一建邊。所以儲存q次提問,最後倒著來一一建邊。在此之前先把沒有銷毀的邊全部建好 細節power能量注意一下 view code 1 include 2 include 3 include 4 include 5...