4

加边的无向图

http://www.nowcoder.com/questionTerminal/994eabf5f243408480fe85ab6428522f

include<bits/stdc++.h>

using namespace std;
int f[100010];
void into(int x)
{
for(int i=0;i<x;i++)
f[i]=i;
}
int find(int x)
{
if(x!=f[x])
f[x]=find(f[x]);
return f[x];
}
void join(int x,int y)
{
x=find(x);
y=find(y);
if(x!=y)
f[x]=y;
}
int main()
{
set<int> s;
int n,m,a,b;
cin>>n>>m;
into(n);
while(m--)
{
cin>>a>>b;
join(a,b);
}
for(int i=0;i<n;i++)
s.insert(find(f[i]));
cout<<s.size()-1<<endl;
return 0;
}</int>

全部评论

相关推荐

点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务