传送门:https://www.luogu.com.cn/problem/P1551
AC代码(并查集板子)
#include<bits/stdc++.h>
#define ll long long
#define maxn 5005
/*
#include <iomanip>
cout<<setiosflags(ios::fixed)<<setprecision(n);//保留n位小数输出
*/
using namespace std;
int pre[maxn];//记录祖先
int Rank[maxn];//树的高度
void init(int n)//初始化
{
for(int i=0;i<n;i++)
{
pre[i] = i;
Rank[i] = 1;
}
}
int find(int x)//找祖先
{
if(pre[x] == x)
return x;
return pre[x]=find(pre[x]);
}
bool isSame(int x,int y)//判断两个人是不是同一个祖先
{
return find(x) == find(y);
}
bool join(int x,int y)//合并
{
x = find(x);
y = find(y);
if(x==y)
return false;
if(Rank[x]>Rank[y])
pre[y] = x;
else
{
if(Rank[x]==Rank[y])
Rank[y]++;
pre[x] = y;
}
return true;
}
int main()
{
int n=0,m=0,p=0;
cin>>n>>m>>p;
int x=0,y=0;
init(n);
while(m--)
{
cin>>x>>y;
join(x,y);
}
while(p--)
{
cin>>x>>y;
if(find(x)==find(y))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}