poj1988 Cube Stacking
看错题意,白贡献了4个RE
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> __int64 parent[31000]; __int64 total[31000]; __int64 under[31000]; __int64 getparent(__int64 x) { if(parent[x]==x) { return x; } __int64 t=getparent(parent[x]); under[x]+=under[parent[x]]; parent[x]=t; return parent[x]; } void Merge(__int64 x,__int64 y) { __int64 m,n; m=getparent(x); n=getparent(y); if(m==n) { return; } parent[n]=m; under[n]=total[m]; total[m]+=total[n]; } int main() { __int64 n; scanf("%I64d",&n); getchar(); __int64 i; for(i=0;i<31000;i++) { parent[i]=i; total[i]=1; under[i]=0; } for(i=0;i<n;i++) { __int64 x,y; char ch; scanf("%c",&ch); if(ch=='M') { scanf("%I64d %I64d",&x,&y); Merge(y,x); } if(ch=='C') { scanf("%d",&x); getparent(x); printf("%I64d\n",under[x]); } getchar(); } return 0; }