HDU3038 種類並查集

2022-02-28 21:38:09 字數 788 閱讀 4560

題意:

給出m組區間[a,b],以及其區間的和,問有矛盾的有幾組;

思路:種類並查集。

主要是幾個關係:同類元素的關係,父親與兒子的關係,不同類元素的關係;

我們可以類似看作乙個字首和,sum[x]是x到根這段路徑上的和,那麼根一定是座標越小的,那麼如果說對於同類(同乙個集合)的判斷就是sum[b]-sum[a-1]是否等於給出值

如果是不同類的話:組合,大的值歸到小的去。

考慮區間[x,y],xx是x的根,yy是y的根

第一種:yy>xx

xx sum[xx]

yy sum[yy]

x sum[x]

valy sum[y]

pre[yy]=xx;

sum[yy] = sum[x] + val - sum[y];

第二種:xx>yy

yy sum[yy]

xx sum[xx]

x sum[x]

valy sum[y]

pre[xx]=yy;

sum[xx] = sum[y] - sum[x] - val;

在狀態壓縮的時候,就是乙個字首和嘛,直接把之前的加過來就好了。

#includeusing namespace std;

const int n=2e5+10;

int sum[n],pre[n],ans,n,m;

int find(int x)

void merge(int x,int y,int val)

else if(xx

hdu 3038 帶權並查集)

思路 sum x 表示區間 x,f x 的和,這個可以在路徑壓縮的時候更新,對於一組資料 u,v,w 令r1 find u r2 find v 於是若r1 r2,此時u,v就有了相同的參考點,而sum u 為區間 u,r1 r2 的和,sum v 為區間 v,r2 r1 的和,於是只需判斷w sum...

hdu 3038 帶權並查集)

思路 sum x 表示區間 x,f x 的和,這個可以在路徑壓縮的時候更新,對於一組資料 u,v,w 令r1 find u r2 find v 於是若r1 r2,此時u,v就有了相同的參考點,而sum u 為區間 u,r1 r2 的和,sum v 為區間 v,r2 r1 的和,於是只需判斷w sum...

HDU 3038 帶權並查集

題目大意 n表示有乙個長度為n的陣列,接下來有m行形如x,y,d的輸入,表示從第x,個元素到第y個元素的和為d 包括x,和y 問m行輸入裡面有幾個是錯誤的 第乙個輸入是正確的 思路參考 這題你不告訴我是並查集,我怎麼想得到。複習一下帶權並查集吧。用dis陣列維護乙個點到他當前父親節點的距離,那麼在f...