标准并查集板子题
没啥好说的,分明是白书上的(除了输入方式外一点都没改动)
#include<cstdio> #include<iostream> using namespace std; int n,m,p,x,y,r1,r2; int father[5001]; inline int root(int x) { if(father[x]!=x)father[x]=root(father[x]); return father[x]; } inline void unionn(int r1,int r2) { father[r2]=r1; } int main(){ scanf("%d%d%d",&n,&m,&p); for(int i=1;i<=n;i++) father[i]=i; for(int i=1;i<=m;i++) { scanf("%d%d",&x,&y); r1=root(x); r2=root(y); if(r1!=r2)unionn(r1,r2); } for(int i=1;i<=p;i++) { scanf("%d%d",&x,&y); if(root(x)==root(y))printf("Yes\n"); else printf("No\n"); } return 0; }
原文:https://www.cnblogs.com/lbssxz/p/10753073.html