并查集的模板题,什么都不用改,一模一样的,就不解释了,毕竟并查集的解释太多了,我肯定说不详细。?
#include<bits/stdc++.h>
using namespace std;
int pre[5010];
int n;
void init()
{
for(int i=1;i<=n;i++)
{
pre[i]=i;
}
}
int find(int x)
{
if(pre[x]!=x)
{
return (pre[x]=find(pre[x]));
}
return x;
}
void join(int x,int y)
{
int xx=find(x);
int yy=find(y);
if(xx!=yy)
{
pre[yy]=xx;
}
}
int main()
{
int m,p,mi,mj,pi,pj;
cin>>n>>m>>p;
init();
for(int i=1;i<=m;i++)
{
cin>>mi>>mj;
join(mi,mj);
}
for(int i=1;i<=p;i++)
{
cin>>pi>>pj;
if(find(pi)==find(pj))
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
}
return 0;
}
|