您的位置:首页 > 其它

九度oj 1526 朋友圈 并查集

2014-04-05 23:41 267 查看
父亲节点怕par[i]是i,说明他是根,总共有多少个根就有多少个朋友圈,因为并查集经过路径压缩后,只要是同一颗树就有相同的根

#include<iostream>
using namespace std;
int par[100005],ran[100005];
void inital(int n)
{
for(int i=1;i<=n;i++)
{
par[i]=i;
ran[i]=0;
}
}
int find(int x)
{
if(x==par[x])return x;
else return par[x]=find(par[x]);
}
void unite(int x,int y)
{
int a=find(x);
int b=find(y);
if(a==b)return ;
if(ran[a]<ran[b])par[a]=b;
else
{
par[b]=a;
if(ran[a]==ran[b])
ran[a]++;
}
}
int main()
{
int i,j,k,m,n;
int a,b;
k=0;
while(cin>>n>>m&&n)
{
inital(n);
for(i=1;i<=m;i++)
{
cin>>a>>b;
unite(a,b);
}
int ans=0;
for(i=1;i<=n;i++)
if(par[i]==i)
ans++;
cout<<ans<<endl;
}
}
/**************************************************************
Problem: 1526
User: 林佳钦gggg
Language: C++
Result: Accepted
Time:530 ms
Memory:2300 kb
****************************************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: