hdu 4496 D-City(并查集)
题意:
思路:
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<cmath> #include<queue> #include<algorithm> using namespace std; const int MAXN=100000+5; int p[MAXN],u[MAXN],v[MAXN],vis[MAXN],w[MAXN],cnt[MAXN]; int n,m,Q,ans; int findfa(int x) { return p[x]==x?x:p[x]=findfa(p[x]); } void bin(int xx,int yy) { int x=findfa(xx); int y=findfa(yy); if(x!=y) { p[x]=y; ans--; } } int main() { while(scanf("%d %d",&n,&m)!=EOF) { ans=n; memset(vis,0,sizeof(vis)); for(int i=1;i<=m;i++) { scanf("%d %d",&u[i],&v[i]); w[i]=i; } for(int i=0;i<n;i++) p[i]=i; /*for(int i=1;i<=m;i++) if(vis[i]==0) bin(u[i],v[i]);*/ for(int i=m;i>0;i--) { cnt[i]=ans; bin(u[w[i]],v[w[i]]); } for(int i=1;i<=m;i++) { printf("%d\n",cnt[i]); } } return 0; }