Source Code
Problem: 3908 | User: yzhw | |
Memory: 1096K | Time: 47MS | |
Language: G++ | Result: Accepted |
# include <cstdio> # define N 100000 using namespace std; int set[N],id[N]; int find(int pos) { if(set[pos]==pos) return pos; else return set[pos]=find(set[pos]); } void uni(int a,int b) { set[find(a)]=find(b); } int main() { int num; while(scanf("%d",&num)!=EOF) { int c=num+1,n1=0,n2=0; for(int i=1;i<N;i++) set[i]=i; for(int i=1;i<=num;i++) id[i]=i; char jud[5]; while(scanf("%s",jud)&&*jud!='e') { int a,b; switch(*jud) { case 'c': scanf("%d%d",&a,&b); uni(id[a],id[b]); break; case 'd': scanf("%d",&a); id[a]=c++; break; case 'q': scanf("%d%d",&a,&b); if(find(id[a])==find(id[b])) n1++; else n2++; break; }; } printf("%d , %d\n",n1,n2); } return 0; }