#include <stdio.h>
#include <string.h>
#define maxn 10050
int n,m;
int p[maxn],x[maxn*10],y[maxn*10];
int find(int x)
{
if(p[x]==x) return x;
else return p[x]=find(p[x]);
}
int link(int u,int v)
{
int x,y;
x=find(u);
y=find(v);
if(x==y) return 0;
else { p[x]=y; return 1;}
}
int main()
{
int ans[maxn*10],i,a,b;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(ans,0,sizeof(ans));
int i,j;
for(i=0;i<n;i++) p[i]=i;
for(i=1;i<=m;i++)
scanf("%d%d",&x[i],&y[i]);
ans[m+1]=n;
for(i=m;i>0;i--)
ans[i]=ans[i+1]-link(x[i],y[i]);
for(i=1;i<=m;i++)
printf("%d\n",ans[i+1]);
}
return 0;
}
hdu 4496 D-City 并查集
最新推荐文章于 2022-06-29 23:57:06 发布