利用路径压缩来统计每个节点到树根之间路径上的一些信息(边带权)
总结
第一次交上去的WA了一次
测试数据中有一个询问时6 6 1,并查集考虑的边权问题,也就是结点到某一个结点的距离,但是这里6到6显然时没有边,所以L–,也就是5到6区间和为1,那么dis[5]=0,dis[6]=1;平时用数据模拟那就不用考虑边的关系,只考虑下标就行。
const int N=2e5+5;
int fat[N],dis[N];
int find(int x)
{
if(fat[x]==x)
return x;
int root=find(fat[x]);
dis[x]+=dis[fat[x]];
return fat[x]=root;
}
signed main()
{
IOS;
//file();
int n,m;
while(cin>>n>>m)
{
int ans=0;
for(int i=1; i<=n; i++)
fat[i]=i,dis[i]=0;
while(m--)
{
int l,r,v;
cin>>l>>r>>v;
l--;///自己WA的点
int tl=find(l);
int tr=find(r);
if(tl==tr)
{
int len=dis[r]-dis[l];
if(len!=v)
ans++;
}
else
{
fat[tr]=tl;
dis[tr]=v+dis[l]-dis[r];
}
}
cout<<ans<<endl;
}
return 0;
}