#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;
}
一行一行看
一个连通图,每次加入一条边后讯问独立块(两个块之间没有连边)的数量