裸并查集。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 1111
#define FILE_INPUT
int set[SIZE];
int init(int size)
{
int i;
for(i=0;i<=size;i++)
set[i]=-1;
return 0;
}
int find(int e)
{
int node=e,root;
while(set[node]>0)
node=set[node];
root=node;
node=e;
while(set[e]>0)
{
node=set[e];
set[e]=root;
e=node;
}
return root;
}
int merge(int e1, int e2)
{
int r1=find(e1);
int r2=find(e2);
if(r1==r2) return 0;
if(set[r1]<set[r2])
set[r2]=r1;
else if(set[r2]<set[r1])
set[r1]=r2;
else
set[r1]=r2,set[r2]--;
return 1;
}
int main(void)
{
int n,m,cnt=0,t1,t2;
#ifdef FILE_INPUT
freopen("in","r",stdin);
#endif
scanf("%d%d",&n,&m);
init(m);
while(n-->0)
{
scanf("%d%d",&t1,&t2);
if(!merge(t1,t2))
cnt++;
}
printf("%d\n",cnt);
return 0;
}