HDU 3038 帶權並查集

2021-09-22 16:42:16 字數 809 閱讀 2343

題目大意:: n表示有乙個長度為n的陣列, 接下來有m行形如x, y, d的輸入, 表示從第x,個元素到第y個元素的和為d(包括x, 和y), 問m行輸入裡面有幾個是錯誤的(第乙個輸入是正確的);

思路參考:

這題你不告訴我是並查集,我怎麼想得到。。。

複習一下帶權並查集吧。用dis陣列維護乙個點到他當前父親節點的距離,那麼在find_set時就可以動態地更新這個值,這就叫做路徑壓縮。

這題思路如下,一切盡在不言中

**如下:

#include #include #include #include #include #include #include using namespace std;

const int maxn=200000+10;

int fa[maxn];

int dis[maxn];//維護每個點到其父節點的距離

int find_set(int x)

else

}int union(int x,int y,int d)

}else

else

}return 1;

}int main()

memset(dis,0,sizeof(dis));

int ans=0;

for(int i=1;i<=m;i++)

}printf("%d\n",ans);

}return 0;

}

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