PKU 1988

#include #include #include # define MAX 30005 /*struct node { int data; int parents; } */ int parents[MAX] ,rank[MAX];// void init(int n)// 因为不一定是max个 所以这里传一个参数进来 { int i ; parents[0] = 0;rank[0] = 0; for(i = 1; i <= n;i ++)// 每个节点刚开始都是自己的父亲 { parents[i] = i; rank[i]= 1; } } int find1(int i) { //for(;parents[i]>= 0;i = parents[i])这里将数据结构的改了 // ; for(;parents[i]!= i; i = parents[i]) ; return i; } void union1(int i,int j) { int t ; int it = find1(i),jt = find1(j); parents[it]= jt;//将i节点置为j 的子节点 t = rank[jt]; rank[jt] = rank[it] + rank[jt]; rank[it] = t; } int main() { int n = 0,a,b,i,num = 0; char s[3]; while(scanf("%d",&n)!=EOF) { num = (n/2>15000)?(MAX +5 ):2*n+5; init(num); //init(n); for(i =0;i < n ;i ++) { //scanf("%c",&c); scanf("%s",s); if(!strcmp(s,"M")) { scanf("%d%d",&a,&b); if(find1(a)!=find1(b)) union1(b,a); } else //( !strcmp(s,"C")) { scanf("%d",&a); if(find1(a) == a) printf("%d/n",rank[a]-1); else printf("%d/n",rank[find1(a)]-rank[a]-1); } //fflush(stdin); } } return 0; }

你可能感兴趣的:(ACM,数据结构,include,struct,c)