并查集

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=20001;
int n,m,q,fa[maxn];
int find(int x){
    if(fa[x]!=x) fa[x]=find(fa[x]);
    return fa[x];
}
inline void un(int a,int b){
    fa[a]=b;
}
int main(){
    cin>>n>>m>>q;
    for(int i=1;i<=n;i++) fa[i]=i;
    for(int i=1;i<=m;i++){
       int a,b;
       cin>>a>>b;
       int A=find(a),B=find(b); 
       if(A!=B) un(A,B);      
    }
    for(int i=1;i<=q;i++){
        int x,y;
        cin>>x>>y;
        if(find(x)==find(y)) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
}
然而这并不用解释

 

 

 

posted @ 2017-11-05 08:07  TimDucan  阅读(112)  评论(0编辑  收藏  举报