#include<stdio.h>
int a[2444444];
int findd(int p)
{
int r=p;
while(a[r]!=r)
{
r=a[r];
}
int i=p,j;
while(i!=r)
{
j=a[i];
a[i]=r;
i=j;
}
return r;
}
void hebing(int t,int b)
{
int l=findd(t);
int r=findd(b);
if(l!=r)
{
a[l]=r;
}
}
int main()
{
int n,m,i,x,y;
while(~scanf("%d%d",&n,&m))
{
for(i=1;i<=n;i++)
{
a[i]=i;
}
while(m--)
{
scanf("%d%d",&x,&y);
hebing(x,y);
}
scanf("%d%d",&x,&y);
//printf("%d***%d\n",a[x],a[y]);
//不是亚索路径了吗?为什么a【x】和a【y】的r不一样啊?
if(findd(x)==findd(y)) printf("same\n");
else printf("not sure\n");
}
}
并查集压缩路径
最新推荐文章于 2024-08-06 09:21:21 发布