HDU 1213
并查集思想,初始每一个人属于各自一个集合,如果当前读入的两个有关系的人不在同一集合,那么就合并他们所属的集合,集合个数减一。
t2469
#include<iostream>
using namespace std;
int father[200];
int n;
//树的思想
int findFather(int x){//找到x的根
while(father[x]!=x) x=findFather(father[x]);
return x;
}void unon(int a,int b)//分别找到ab的根,如果不一样,把b的根变成a的子树
{
int fa=findFather(a);
int fb=findFather(b);
if(fa!=fb){
father[fb]=fa;
n--;
}}
int main()
{
int k,m;
int p,q;
cin>>k;
while(k--){
cin>>n>>m;
for(int i=1;i<=n;i++)//初始化
father[i]=i;
for(int i=0;i<m;i++){
cin>>p>>q;
unon(p,q);
}
cout<<n<<endl;
}
return 0;
}
1847

被折叠的 条评论
为什么被折叠?



