PLZ help.
Code: Select all
#include<stdio.h>
#include<string.h>
#define max 100
int set[max];
int cc;
int rootof(int node)
{
while(set[node]>0) node=set[node];
return node;
}
void setunion(int pr,int cr)
{set[pr]+=set[cr]; set[cr]=pr;}
void disjointset(int v1, int v2)
{
int r1=rootof(v1);
int r2=rootof(v2);
if(r1!=r2)
{
if(set[r1]<set[r2])
{setunion(r1,r2); if(v1!=r1)set[v1]=set[v2]=r1;}
else
{setunion(r2,r1); if(v2!=r2)set[v1]=set[v2]=r2;}
cc--;
}
}
void initgrp(int n)
{
int c1;
for(c1=0;c1<n;c1++) set[c1]=-1;
cc=n;
}
int main()
{
char ips[3];
int f=0;
while(1)
{
gets(ips);
if(ips[0]==' ')
{if(f)printf("%d\n",cc);break;}
if(strlen(ips)==1)
{
if(f)printf("%d\n",cc);
initgrp(ips[0]-'A'+1);
if(!f)f=1;
}
else if(strlen(ips)==2)
disjointset(ips[0]-'A',ips[1]-'A');
}
return 0;
}