hdu 3038 帶權並查集)

2021-06-22 05:40:42 字數 685 閱讀 4970

思路: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[v]-sum[u]即可;若r1r2這種情況也一樣,這裡就不在贅述了。

1 #include2 #include3 #include4 #include5

using

namespace

std;

6#define maxn 222222

7int

sum[maxn],father[maxn];

8int

n,m;910

void

initiate()

1116

17int find(int

x)18

2526

bool union(int u,int v,int

w)27

else37}

3839

intmain()

4049 printf("

%d\n

",ans);50}

51return0;

52 }

view code

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...

HDU 3038 帶權並查集

簡單來說,給出n句話,判斷謊言的個數,謊言就是與前面真話衝突的話。帶權並查集的典型題。個人覺得帶權並查集就是給出了結點的相對關係,已知相對關係的點就放到乙個連通的塊裡,也就是並查集有同乙個根節點。這些相對關係又能轉化到乙個結點上,這個結點就是它們共有根節點,而轉化到同一結點的過程就是路徑壓縮的過程。...