并查集

#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;
        }
    }

}


阅读更多
想对作者说点什么?

博主推荐

换一批

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