题目
题意:一段线段为[1,n],给出好多段区间和为多少。让你判断有多少答案是错误的。没插入一个信息,先判断正确与否。不正确的话就不插入这个信息。
基础种类并查集 比较常见。 hdu 3047
#include<bits/stdc++.h>
using namespace std;
const int N=200005;
int f[N],r[N];
int seek(int x){
if(x==f[x]) return x;
int fa=f[x];
f[x]=seek(fa),r[x]=r[x]+r[fa];
return f[x];
}
int main(){
int n,m;
while(~scanf("%d%d",&n,&m)){
int a,b,x,ans=0;
for(int i=0; i<=n; i++) f[i]=i,r[i]=0;
while(m--){
scanf("%d%d%d",&a,&b,&x);--a;
int ra=seek(a),rb=seek(b);
if(ra!=rb) f[ra]=rb,r[ra]=-r[a]+x+r[b];
else if(x!=r[a]-r[b]) ++ans;
}
printf("%d\n",ans);
}
}