https://vjudge.net/problem/UVA-793
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=5e5+10;
int set[N];
int set_find(int x){
if(set[x]==-1)return x;
return set[x]=set_find(set[x]);
}
char buf[100];
int main(){
int z;
scanf("%d",&z);
int f=0;
while(z--){
if(f)puts("");
f=1;
int n;
scanf("%d",&n);
memset(set,-1,sizeof(set));
int c1=0,c2=0;getchar();
int x,y;
while(1){
if(!gets(buf)){
printf("%d,%d\n",c1,c2);
return 0;
}else if(buf[0]=='\0'){
printf("%d,%d\n",c1,c2);
//scanf("%d",&n);getchar();
break;
}else if(buf[0]=='c'){
sscanf(buf+1,"%d%d",&x,&y);
x=set_find(x);
y=set_find(y);
if(x!=y)set[x]=y;
}else if(buf[0]=='q'){
sscanf(buf+1,"%d%d",&x,&y);
x=set_find(x);
y=set_find(y);
if(x!=y)c2++;
else c1++;
}
}
}
}