hdu2818

来源:互联网 发布:天津好吃的地方知乎 编辑:程序博客网 时间:2024/06/05 05:17
/*
分析:
    并查集。
    我自己写的是向上和向下两个并查集和起来完成这个
题的,有点儿麻烦就不贴了,下面是参考别人的,只单纯
向下并查做的。


                                               2013-02-28
*/








#include"stdio.h"#include"string.h"#include"stdlib.h"#define N 30011int low[N],d[N],h[N];int find(int k){if(low[k]==k)return k;int t=find(low[k]);d[k]+=d[low[k]];low[k]=t;return t;}int main(){int i;int n;char str[11];int a,b,f1,f2;while(scanf("%d",&n)!=-1){memset(d,0,sizeof(d));for(i=0;i<N;i++){low[i]=i;h[i]=1;}while(n--){scanf("%s",str);switch(str[0]){case 'M':{scanf("%d%d",&a,&b);f1=find(a);f2=find(b);if(f1==f2)continue;d[f1]=h[f2];h[f2]+=h[f1];low[f1]=f2;break;}case 'C':{scanf("%d",&a);find(a);printf("%d\n",d[a]);break;}default:break;}}}return 0;}


原创粉丝点击