 
        #include<cstdio.h>
#include<cstring.h>
#include<vector>
using namespace std;
int fa[10005];
int findest(int x){
 return fa(x)==-1?x:fa(x)findest(fa(x));
}
int bind(int u,int v){
int fu=findset(u);
int fv=findset(v);
if(fu!=fv){
fa[fu]=fv;
return 1;
}
return 0;
}
int main(int argc,char*argv[])
{
 int n,m,i;
 while(scanf("%d%d",&m,&n)==2)
 {
  memset(fa,-1,sizeof(fa));
  vector<pair<int,int>>vc;
  for(i=0;i<n;i++)
  {
   int x,y;
   scanf("%d%d",&x,&y);
vc.push_back(nake_pair(x,y));
  }
  vector<int>res;
  int cnt=n;
  res.push_back(cnt);
  for(i=n-1;i>=1;i--)
  {
   cnt-=bind(vc[i].frist,vc[i].second);
   res.push_back(cnt);
  }
  for(i=res.size()-1;i>=0;i--)
   printf("%d\n",res[i]);
 }
 return 0;
}
  
一行一行看
一个连通图,每次加入一条边后讯问独立块(两个块之间没有连边)的数量