并查集

版权声明:勿转 https://blog.csdn.net/wuqi5328/article/details/80316887
#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
const int maxn=1000+10;
int n,m,x,y;
int pre[maxn];
int Find(int x)
{
  if(pre[x]<0 ) return x;
  return pre[x]=Find(pre[x]);
}
void Union(int x,int y){
   x=Find(x);
   y=Find(y);
   if(x==y)  return;
   pre[x]+=pre[y];
   pre[y]=x;
}
int main()
{
    string a;
    cin>>n>>m;
    for(int i=1;i<=n;i++)  pre[i]=-1;
    while(m--){
        cin>>a;
        if(a=="Find"){
            cin>>x>>y;
        if(Find(x)==Find(y))  cout<<"True"<<endl;
        else cout<<"False"<<endl;
        }
        else if(a=="Union"){
            cin>>x>>y;
          Union(x,y);
        }
        else if(a=="Count"){
            cin>>x;
        cout<<-pre[Find(x)]<<endl;
        }
    }

}


没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试