COGS[259] 亲戚
并查集模板。
// q.c #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; const int M=20000+10; /***********************************************************************/ int f[M],dep[M]; int finds(int x) { return f[x]==x?f[x]:f[x]=finds(f[x]); } void merge(int x,int y) { if(dep[x]>dep[y]) { f[y]=x; return ; } f[x]=y; if(dep[x]==dep[y]) dep[y]++; } /***********************************************************************/ int main() { freopen("relations.in","r",stdin); freopen("relations.out","w",stdout); int n,m,q,a,b; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { f[i]=i; } for(int i=1;i<=m;i++) { scanf("%d%d",&a,&b); a=finds(a); b=finds(b); if(a!=b) merge(a,b); } scanf("%d",&q); for(int i=1;i<=q;i++) { scanf("%d%d",&a,&b); a=finds(a); b=finds(b); a==b?printf("Yes\n"):printf("No\n"); } return 0; }