这种数据结构题还是封装起来用比较舒服(强迫症)。
没什么好说的,就是带路径压缩的并查集(不路径压缩会TLE)。
常用于Kruskal算法等。
#include<cstdio>
using namespace std;
#define maxn 10000
struct UnionFindSet
{
int x,y,v;
int fat[maxn];
UnionFindSet()
{
for(int i=0;i<maxn;i++)
fat[i]=i;
x=y=v=0;
}
inline int father(int x)
{
if(fat[x]!=x)
fat[x]=father(fat[x]);
return fat[x];
}
inline void unionn(int x,int y)
{
int fa=father(x);
int fb=father(y);
if(fa!=fb)
fat[fa]=fb;
}
};
UnionFindSet s;
int n,m,z,x,y;
int main()
{
scanf("%d%d",&n,&m);
while(m--)
{
scanf("%d%d%d",&z,&x,&y);
if(z==1)
s.unionn(x,y);
else if(z==2)
{
if(s.father(x)!=s.father(y))
printf("N\n");
else
printf("Y\n");
}
}
return 0;
}