hdu 4496 D-City 并查集
#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; }