Dragon Balls(并查集)
来源:互联网 发布:sql 没有权限 编辑:程序博客网 时间:2024/06/05 05:35
Dragon Balls
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 864 Accepted Submission(s): 343
Problem Description
Five hundred years later, the number of dragon balls will increase unexpectedly, so it\\\\’s too difficult for Monkey King(WuKong) to gather all of the dragon balls together.
His country has N cities and there are exactly N dragon balls in the world. At first, for the ith dragon ball, the sacred dragon will puts it in the ith city. Through long years, some cities\\\\’ dragon ball(s) would be transported to other cities. To save physical strength WuKong plans to take Flying Nimbus Cloud, a magical flying cloud to gather dragon balls.
Every time WuKong will collect the information of one dragon ball, he will ask you the information of that ball. You must tell him which city the ball is located and how many dragon balls are there in that city, you also need to tell him how many times the ball has been transported so far.
Input
The first line of the input is a single positive integer T(0 < T <= 100).
For each case, the first line contains two integers: N and Q (2 < N <= 10000 , 2 < Q <= 10000).
Each of the following Q lines contains either a fact or a question as the follow format:
T A B : All the dragon balls which are in the same city with A have been transported to the city the Bth ball in. You can assume that the two cities are different.
Q A : WuKong want to know X (the id of the city Ath ball is in), Y (the count of balls in Xth city) and Z (the tranporting times of the Ath ball). (1 <= A, B <= N)
Output
For each test case, output the test case number formated as sample output. Then for each query, output a line with three integers X Y Z saparated by a blank space.
Sample Input
2
3 3
T 1 2
T 3 2
Q 2
3 4
T 1 2
Q 1
T 1 3
Q 1
Sample Output
Case 1:
2 3 0
Case 2:
2 2 1
3 3 2
//解题思路
之前交上一直超时 后来采用了并查集的压缩路径
关键代码:
int find (int x){ if(x!=ff[x]) ff[x]= find(ff[x]); return ff[x];}
然后一边压缩 一边记录其移动次数
#include<stdio.h>#include<string.h>#define maxn 10010int tree[maxn];int citynum[maxn];//记录每个城市的龙珠个数int tranum[maxn];//记录每个龙珠移动的次数int find(int x)//while循环的路径压缩不知道怎么处理移动次数,无奈递归了{ int t; if(x!=tree[x]) { int t=tree[x]; tree[x]=find(tree[x]); tranum[x]+=tranum[t];//加上父节点的移动次数的次数 } return tree[x];}void megre(int x,int y){ int fx=find(x); int fy=find(y); if(fx!=fy) { tree[fx]=fy; citynum[fy]+=citynum[fx];//把子节点的龙珠全部给父节点 tranum[fx]++;//转移次数加一 }}int main(){ int T,k=1,n,q,i,a,b; char s[3]; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&q); for(i=1;i<=n;++i) { tree[i]=i; citynum[i]=1; tranum[i]=0; } printf("Case %d:\n",k++); while(q--) { scanf("%s",s); if(s[0]=='T') { scanf("%d%d",&a,&b); megre(a,b); } else { scanf("%d",&a); int t=find(a); printf("%d %d %d\n",t,citynum[t],tranum[a]); } } } return 0;}
- Dragon Balls(并查集)
- HDU3635:Dragon Balls(并查集)
- Dragon Balls(并查集)
- hdu 3635 Dragon Balls(并查集)
- hud Step5.1.6 3635 Dragon Balls(并查集)
- HDU 3635 Dragon Balls(并查集:路径压缩)
- HDU 3635-Dragon Balls(高级并查集)
- HDU 3635 Dragon Balls(带权并查集)
- HDU 3635 Dragon Balls (并查集)
- HDU 3635 Dragon Balls(并查集)
- HDU 3635 Dragon Balls (并查集)
- hdu 3635 Dragon Balls(带权并查集)
- 杭电3635-Dragon Balls(并查集)
- hdu 3635 Dragon Balls(并查集)
- hdu 3635 Dragon Balls(并查集)
- hdoj--3635--Dragon Balls(并查集记录深度)
- POJ 3635 Dragon Balls (并查集)
- HDOJ 3635 Dragon Balls(并查集)
- HDOJ1789 Doing Homework again 贪心
- 学习日记-安卓Package Manager和Package Installer
- jQuery在IE8上使用时提示“对象不支持此属性或方法”
- 5.x中批量设置选定文件夹对应的AssetBundle名称
- cxf web service简单配置
- Dragon Balls(并查集)
- 习近平带领我们走过的这不平凡五年——从严治党篇
- ActivityStack类startActivityLocked方法解析
- android intent打开各种文件的方法
- python __name__
- html5单选按钮1
- python编程中要注意的几点
- 【无中生有】---17---基于大数据平台的计算开发模式
- 使用XML配置spring-websocket服务