并查集
#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; } }
然而这并不用解释