#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 10010;
int p[N],d[N];
int n,m;
int find(int x)
{
if(p[x]==x||p[p[x]]==p[x])return p[x];
int r=find(p[x]);
d[x]+=d[p[x]];
p[x]=r;
return r;
}
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)p[i]=i;
for(int i=0;i<m;i++)
{
int op,a,b;
cin>>op>>a>>b;
if(op==1)
{
int pa=find(a),pb=find(b);
if(pa!=pb)
{
d[pa]-=d[pb];
p[pa]=pb;
}
}
else
{
int pa=find(a);
d[pa]+=b;
}
}
for(int i=1;i<=n;i++)
if(i==find(i))cout<<d[i]<<" ";
else cout<<d[i]+d[p[i]]<<" ";
}
网络分析---并查集上做差分
最新推荐文章于 2023-06-12 10:53:53 发布