D-City (并查集)
HDU 4496
int N;
int M;
int F[10002];
int num[100002];
struct Node//边结构体
{
int u;
int v;
Node(){}
Node(int i , int j):u(i) , v(j){}
}Edge[100002];
int Find(int x)
{
if(F[x] == -1) return x;
else
return F[x] = Find(F[x]);
}
int main()
{
//freopen("in.txt" , "r" , stdin);
while(scanf("%d%d" , &N , &M) != EOF)
{
int i , j , u , v;
memset(F , -1 , sizeof(F));
for(i = 0;i <= N;i++) List[i].clear();
for(i = 1;i <= M;i++)
{
scanf("%d%d" , &u , &v);
Edge[i] = Node(u , v);
}
num[M] = N;
for(i = M;i > 1;i--)
{
int t1 = Find(Edge[i].u);
int t2 = Find(Edge[i].v);
if(t1 != t2)
{
num[i - 1] = num[i] - 1;
F[t1] = t2;
}
else
num[i - 1] = num[i];
}
for(i = 1;i <= M;i++)
printf("%d\n" , num[i]);
}
return 0;
}