标签:des style blog http io ar color os sp
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3363 Accepted Submission(s): 1304
题意:
每一个城市都有一颗龙珠,但是随着时间的推移,龙珠会被移到其他的城市,悟空想去收集这些龙珠,但是他需要你告知他,他要找的那颗龙珠的所在的城市,以及这个城市所拥有的龙珠数量,还有这颗龙珠迁移过多少次。
代码:
1 #define LOCAL 2 #include<cstring> 3 #include<cstdio> 4 #define maxn 10005 5 /* 6 (1) 第i求所在的城市x city[]; 7 (2) x城市所拥有的球数量 ball[]; 8 (3) i球被转移的次数 cnt[]; 9 */ 10 int ball[maxn]; 11 int city[maxn]; 12 int cnt[maxn]; 13 int n,q; 14 void init(){ 15 for(int i=1 ; i<=n ;i++ ){ 16 city[i]=i; 17 ball[i]=1; 18 cnt[i]=0; //转移次数 19 } 20 } 21 22 //搜索该龙珠所在城市的位置 23 int fin(int x) 24 { 25 //int tem; 26 if(x==city[x]) 27 return city[x]; 28 int tem=city[x]; 29 city[x]=fin(city[x]); 30 cnt[x]+=cnt[tem]; 31 return city[x]; 32 } 33 34 void Union(int x,int y) 35 { 36 /* 37 将 x城市的所有龙珠转移到y城市中 38 */ 39 x=fin(x); 40 y=fin(y); 41 if(x!=y){ 42 city[x]=city[y]; 43 ball[y]+=ball[x]; 44 ball[x]=0; //球全部移动到y城市中 45 cnt[x]=1; //第一次移动 46 } 47 } 48 49 int main() 50 { 51 52 int t,a,b,tt=0; 53 char str[2]; 54 scanf("%d",&t); 55 while(t--){ 56 scanf("%d%d",&n,&q); 57 init(); 58 printf("Case %d:\n",++tt); 59 while(q--){ 60 scanf("%s",str); 61 if(str[0]==‘T‘){ 62 scanf("%d%d",&a,&b); 63 Union(a,b); 64 } 65 else 66 { 67 scanf("%d",&a); 68 b=fin(a); 69 printf("%d %d %d\n",b,ball[b],cnt[a]); 70 } 71 } 72 } 73 return 0; 74 }
标签:des style blog http io ar color os sp
原文地址:http://www.cnblogs.com/gongxijun/p/4149758.html