并查集封装模板

#include<cstdio>

const int maxn=5*1e3+1e2;

int n,m;

struct DSU{
	int dad[maxn];
	
	int anc(int x)
	{
		if(dad[x]) return dad[x]=anc(dad[x]);
		else return x;
	}
	
	void uni(int x,int y)
	{
		x=anc(x);
		y=anc(y);
		if(x!=y) dad[x]=y;
		return;
	}
	
	bool ask(int x,int y)
	{
		return anc(x)==anc(y);
	}
};

DSU dsu;

int main()
{
	int p;
	scanf("%d %d %d",&n,&m,&p);
	
	for(int i=1;i<=m;i++)
	{
		int u,v;
		scanf("%d %d",&u,&v);
		dsu.uni(u,v);
	}
	
	for(int i=1;i<=p;i++)
	{
		int u,v;
		scanf("%d %d",&u,&v);
		if(dsu.ask(u,v)) printf("Yes\n");
		else printf("No\n");
	}
	
	return 0;
}
posted @ 2020-11-14 21:44  SeekHummingbird  阅读(93)  评论(0)    收藏  举报