洛谷:P1536 村村通(并查集,普及/提高-)

题目:

在这里插入图片描述

分析:在模板代码上进行修改,因为遇到-1就是新的集合。

不多说了。

代码:

#include<bits/stdc++.h>
using namespace std;
int A[5005];
int ans=0;
int f(int x)//求x的代表元素 
{
 if(A[x]==-1)
 {
  A[x]=x;
  ans++;
  return x;
 }
 if(A[x]==x) return x;
 return A[x]=f(A[x]);
}
int main()
{
 memset(A,-1,sizeof(A));
 int a1,a2,a3;
 while(1)
 {
 cin>>a1;if(a1!=0) cin>>a2;else return 0;
 for(int i=0;i<a2;i++)
 {
  int c1,c2;
  cin>>c1>>c2;
  int c3=f(c1);
  int c4=f(c2);
  if(c3==c4) continue;
  A[c3]=c4;
  ans--;
 }
 for(int i=1;i<=a1;i++) if(A[i]==-1) ans++;
 cout<<ans-1<<endl;
 memset(A,-1,sizeof(A));
 ans=0;
 }
 } 

猜你喜欢

转载自blog.csdn.net/weixin_42721412/article/details/108262969
今日推荐