zoj3261 並查集 略有變形

2021-05-26 20:06:35 字數 952 閱讀 7173

題意:有n個星球,每個星球有一定的power值,某些星球是直接或間接相連的。。。當某個星球想求助時會找到相連的裡面的power值最大而且大於自己的乙個星球。。。先在給定這些power值並給定兩兩相連的資訊,然後又q個操作,destroy a b是刪除a b直接相連的邊(保證存在),query a求向誰求助,如果不能求助輸出-1 。。。

這題是miaowu做的時候給我做的。。。

本來還沒想法,他提醒的我哈。。比較巧妙的是先將相連資訊和操作資訊存下來,從後往前推就成了裸的並查集了。。。

但是存兩兩關係不大好存。。只能想到用vector存。。。(話說感覺理論上講如果出**資料的話是會超時的哈)。。。。

中間乙個判斷出錯wa了幾次。。。

**:#include#include#includeusing namespace std;

const int n=50010;

int a[n], n, m, q, f[n], x1[n], y1[n], ans[n], ansn;

vectorma[n];

char s[20];

int findset(int x)

void unionset(int x, int y)

scanf("%d", &q);

for(i=0; iy1[i])

swap(x1[i], y1[i]);

for(it=ma[x1[i]].begin(); it!=ma[x1[i]].end(); it++)

if(*it==y1[i])

}} for(i=0; i<=n; i++)

f[i] = i;

for(i=0; i=0; i--)

else

unionset(x1[i], y1[i]);

} for(i=ansn-1; i>=0; i--)

printf("%d\n", ans[i]);

for(i=0; i

zoj3261變形並查集

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

逆向並查集(ZOJ 3261)

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

zoj 3261 逆向並查集

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