HDU3038

好题

转载解析:https://blog.csdn.net/yjr3426619/article/details/82315133

 1 #include<iostream>
 2 using namespace std;
 3 int n,m,f[200100],s[200100],ans;
 4 
 5 void ini(){
 6     for (int i=0;i<=n;i++){
 7         f[i]=i;
 8         s[i]=0;
 9     }
10     ans=0;
11 }
12 
13 int getf(int u){
14     if (u!=f[u]){
15         int tmp=f[u];
16         f[u]=getf(f[u]);
17         s[u]+=s[tmp];
18     }
19     return f[u];
20 }
21 
22 void merge(int l,int r,int v){
23     int lf=getf(l),rf=getf(r);
24     if (lf==rf){
25         if ((v+s[r])!=s[l]) ans++;
26         return;
27     }
28     f[lf]=rf;
29     s[lf]=-s[l]+v+s[r];
30 }
31 
32 int main()
33 {
34     while (cin>>n>>m){
35         ini();
36         while (m--){
37             int l,r,v;
38             cin>>l>>r>>v;
39             l--;
40             merge(l,r,v);
41         }
42         cout<<ans<<endl;
43     }
44     return 0;
45 }

 

posted @ 2020-05-08 00:25  White_Li  阅读(160)  评论(0)    收藏  举报