标签:des style blog http ar io color os sp
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1744 Accepted Submission(s): 660
提议很简单,就是问:
a和b是否在同一个集合,不在就将他们加入到集合,在就对他们进行路径比较,如果给定的路程和实际路程不一样,那就表示冲突,记录下来
输出最后冲突的数量。(注意的是,b在a的前面,也就是b到根的路程要大于a到根的路程)
---------》带权值的路径......
代码:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define maxn 50005 4 5 int father[maxn]; 6 int dist[maxn]; 7 int n,m,re; 8 9 void init(){ 10 re=0; 11 for(int i=0;i<=n;i++){ 12 father[i]=i; 13 dist[i]=0; 14 } 15 } 16 17 int fin(int x){ 18 if(x==father[x]) return x; 19 int pre=father[x]; 20 father[x]=fin(father[x]); 21 dist[x]+=dist[pre]; //统计每一个点到根点的距离 22 return father[x]; 23 } 24 25 void Union(int x , int y , int val ){ 26 int a=fin(x); 27 int b=fin(y); 28 if(a==b){ 29 //注意方向-------顺时针 30 if(dist[y]-dist[x]!=val) 31 re++; 32 } 33 else{ 34 father[b]=a; 35 dist[b]=dist[x]-dist[y]+val; 36 } 37 } 38 39 int main(){ 40 int a,b,c; 41 while(scanf("%d%d",&n,&m)!=EOF){ 42 init(); 43 while(m--){ 44 scanf("%d%d%d",&a,&b,&c); 45 Union(a,b,c); 46 } 47 printf("%d\n",re); 48 } 49 return 0; 50 }
标签:des style blog http ar io color os sp
原文地址:http://www.cnblogs.com/gongxijun/p/4168101.html