并查集
#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;
        }
    }

}


阅读更多
个人分类: ACM
想对作者说点什么? 我来说一句

acm的数据结构内容

2010年04月23日 408KB 下载

朱全民-并查集ppt

2009年07月25日 103KB 下载

并查集初步

2012年12月01日 386KB 下载

并查集 第12章 并查集

2013年04月11日 338KB 下载

数据结构--并查集(Union-Find Sets)

2011年05月14日 341KB 下载

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

不良信息举报

并查集

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭