和3047差不多。
但是为什么是a--。
不理解,不加这条就一直wa
代码如下:
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=200005;
int pre[maxn],val[maxn];
void init(int n)
{
for(int i=0;i<=n;i++){
pre[i]=i;
val[i]=0;
}
}
int find(int x)
{
if(x==pre[x]) return x;
int r=pre[x];
pre[x]=find(pre[x]);
val[x]+=val[r];
return pre[x];
}
void Union(int x,int y,int dis)
{
int fx=find(x);
int fy=find(y);
if(fx!=fy){
pre[fy]=fx;
val[fy]=val[x]-val[y]+dis;
}
}
int main()
{
int n,m,a,b,dis,ans;
while(~scanf("%d%d",&n,&m)){
init(n);
ans=0;
while(m--){
scanf("%d%d%d",&a,&b,&dis);
a--;
if(find(a)==find(b)){
// cout<<"miao"<<endl;
if(val[b]-val[a]!=dis)
ans++;
}
else{
Union(a,b,dis);
}
}
printf("%d\n",ans);
}
}