hdu 3038 How Many Answers Are Wrong
2015-05-22 21:57
323 查看
[code]#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <set> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> using namespace std; int sum[200000+5],bin[200000+5]; int Find(int x) { if(bin[x]==x) return x; int t=bin[x]; bin[x]=Find(bin[x]); sum[x]+=sum[t]; return bin[x]; } int Union(int x,int y,int w) { int a=Find(x),b=Find(y); if(a==b) { //printf("%d %d\n",sum[x],sum[y]); if(sum[x]!=w+sum[y]) return 0; } else { //printf("%d %d\n",a,b); bin[a]=b; sum[a]=w-sum[x]+sum[y]; } return 1; } int main() { int n,m,i,ai,bi,w,ans; while(~scanf("%d%d",&n,&m)) { ans=0; for(i=0; i<=n; i++) { bin[i]=i; } memset(sum,0,sizeof(sum)); for(i=0; i<m; i++) { scanf("%d%d%d",&ai,&bi,&w); if(Union(ai-1,bi,w)==0) //反正没有0的情况,这样一处理方便计算ai与bi相同时的结果 ans++; } printf("%d\n",ans); } return 0; }
相关文章推荐
- HDU 3038 How Many Answers Are Wrong
- HDU 3038 How Many Answers Are Wrong (并查集)
- hdu 3038 How Many Answers Are Wrong(带权并查集)
- HDU 3038 How Many Answers Are Wrong(种类并查集)
- HDU-3038 How Many Answers Are Wrong
- hdu 3038 How Many Answers Are Wrong 带权并查集
- HDU-3038 How Many Answers Are Wrong 并查集
- hdu 3038 How Many Answers Are Wrong (带权)
- HDU 3038 How Many Answers Are Wrong
- hdu 3038 How Many Answers Are Wrong(带权并查集)
- HDU 3038 How Many Answers Are Wrong 并查集带权路径压缩
- HDU 3038 How Many Answers Are Wrong (带权并查集+区间判断)
- hdu 3038 How Many Answers Are Wrong(种类并查集)2009 Multi-University Training Contest 13
- HDU 3038 How Many Answers Are Wrong【带权并查集】
- hdu-3038-How Many Answers Are Wrong-带权并查集
- HDU 3038 How Many Answers Are Wrong 【神奇并查集】
- HDU 3038 how many answers are wrong(带权并查集)
- hdu 3038 How Many Answers Are Wrong【带权并查集】
- HDU 3038 - How Many Answers Are Wrong
- HDU-3038 How Many Answers Are Wrong 带权并查集