第一次写博客~
纪念一下开始学并查集啦,第一道AC(捂脸)
#include
#include
#include
int pre[1005];
bool t[1005];
int Find(int x)
{
int r=x;
while(r!=pre[r])
r=pre[r];
int i=x,j;
while(pre[i]!=r)
{
j=pre[i];
pre[i]=r;
i=j;
}
return r;
}
void join(int x,int y)
{
int fx=Find(x),fy=Find(y);
if(fx!=fy)
pre[fx]=fy;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int N,M,a,b,i,j,ans;
scanf("%d%d",&N,&M);
for(i=1;i<=N;i++)
pre[i]=i;
for(i=1;i<=M;i++)
{
scanf("%d%d",&a,&b);
join(a,b);
}
memset(t,0,sizeof(t));
for(i=1;i<=N;i++)
{
t[Find(i)]=1;
}
for(ans=0,i=1;i<=N;i++)
if(t[i])
ans++;
printf("%d\n",ans);
}
return 0;
}