标签:线索 代码 ace 原则 end 并查集 turn init else
给你n,m表示n给人,m条线索(谁的boss是谁),问你最后有多少个帮派
#include<bits/stdc++.h>
using namespace std;
int f[10000];
void init(int n){
for(int i=1;i<=n;i++)
f[i]=i;
}
int getf(int v){//寻找boss
if(f[v]==v) return v;
else{
f[v]=getf(f[v]);
return f[v];
}
}
void merge(int u,int v){//合并有相同性质的,靠左原则
int t1=getf(u);
int t2=getf(v);
if(t1!=t2){
f[t2]=t1;
}
}
int main(){
int n,m,a,b;
while(cin>>n>>m){
init(n);
int sum=0;
for(int i=1;i<=m;i++)
{
cin>>a>>b;
merge(a,b);
}
for(int i=1;i<=n;i++)
{
cout<<f[i]<<‘ ‘;
if(f[i]==i) sum++;
}
cout<<endl;
cout<<sum<<endl;
}
return 0;
}
标签:线索 代码 ace 原则 end 并查集 turn init else
原文地址:https://www.cnblogs.com/mch5201314/p/9756393.html