hdu 3038 並查集

題目:給出一些詢問,[l,r]的和爲s,問有多少個是錯的ios

 1 //並查集 ,,sum[a]表示a與父親這條路徑上的和
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cstring>
 5 #include <algorithm>
 6 
 7 using namespace std;
 8 
 9 const int maxn = 2e5 + 5;
10 int fa[maxn], sum[maxn];
11 int n, m, l, r, s;
12 int findFa(int x){
13     if (x != fa[x]){
14         int t = fa[x];
15         fa[x] = findFa(fa[x]);
16         sum[x] += sum[t];
17     }
18     return fa[x];
19 }
20 int main(){
21     while (~scanf("%d%d", &n, &m)){
22         for (int i = 0; i <= n; ++i){
23             fa[i] = i;
24             sum[i] = 0;
25         }
26         int ans = 0;
27         while (m--){
28             scanf("%d%d%d", &l, &r, &s);
29             l --;
30             int pa = findFa(l), pb = findFa(r);
31             if (pa == pb){
32                 if (sum[r] - sum[l] != s) ans++;
33             }
34             else {
35                 fa[pb] = pa;
36                 sum[pb] = sum[l] - sum[r] + s;
37             }
38         }
39         printf("%d\n", ans);
40     }
41     return 0;
42 }
相關文章
相關標籤/搜索