这个题困扰我一个世纪了
#include<bits/stdc++.h>
using namespace std;
const int N=10010;
int n,m,w;
int c[N],d[N];
int u,v;
int f[N];
int p[N];
int nu,t[N];
int cc[N],dd[N];
int find(int x){
if(p[x]==x) return x;
return p[x]=find(p[x]);
}
int main(){
cin>>n>>m>>w;
for(int i=1;i<=n;i++){
cin>>c[i]>>d[i];
}
for(int i=1;i<=n;i++) p[i]=i;
for(int i=1;i<=m;i++){
cin>>u>>v;
c[p[v]]+=c[p[u]];
d[p[v]]+=d[p[u]];
p[u]=find(p[v]);
}
for(int i=1;i<=n;i++) {
t[p[i]]++;
}
for(int i=1;i<=n;i++) if(t[i]>=1) nu++;
int num=1;
for(int i=1;i<=n;i++){
if(t[i]!=0) cc[num]=c[t[i]];dd[num]=d[t[i]];
}
for(int i=1;i<=nu;i++){
cout<<cc[i]<<" ";
}
cout<<endl;
for(int i=1;i<=nu;i++){
cout<<dd[i]<<" ";
}
}
悬赏关注