hdoj 3635 Dragon Balls【并查集】
2015-08-02 14:31
573 查看
Dragon Balls
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4364 Accepted Submission(s): 1667
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.
![](http://acm.hdu.edu.cn/data/images/C308_1004_1.jpg)
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
Q A
X:A号球 目前所在的 X城 的ID ( 找父节点 )
Y:X城 目前的 球总数 ( 根节点总数 )
Z:A号球被转移了几次 ( 计数器数组 )
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<iostream> #include<algorithm> #define N 10010 using namespace std; int n,m; int f ,r ,t ;// f 父节点 r 根节点 t 计数器 累计不同球转移次数 void init() { memset( t , 0 , sizeof(t)); for( int i=0;i<=n;i++) { f[i]=i; r[i]=1; } } //查找 父节点 根节点 压缩路径 计算转移次数 int find( int x ) { if( f[x] !=x) { int fa = f[x]; f[x] = find(fa); r[x]+=r[fa]; t[x]+=t[fa]; } return f[x]; } // 合并 父节点 void join( int x,int y) { int fx=find(x); int fy=find(y); if( fx!= fy) { f[fx] = fy; r[fy] +=r[fx]; t[fx]++; } } void solve(int x) { int fx=find(x); printf("%d %d %d\n",fx,r[fx],t[x]); } int main() { int h,ca=1; char c; int x,y; scanf("%d",&h); while(h--) { scanf("%d%d",&n,&m); getchar(); init(); printf("Case %d:\n",ca++); while(m--) { c = getchar(); if(c=='T') { scanf("%d%d",&x,&y); getchar(); join(x,y); } else { scanf("%d",&x); getchar(); solve(x); } } } return 0; }
相关文章推荐
- codeforces 559A A. Gerald's Hexagon(几何题)
- Google黑客常用的入侵语法
- HDU 3635 Dragon Balls 带权并查集
- django notes 二:URL dispatcher
- django notes 一:开篇
- Google Play Store启用AdWords搜索广告
- poj 2762 Going from u to v or from v to u? 【判断图是否为弱连通】 【tarjan求SCC + 缩点 + 拓扑排序】
- HackerRank - "Lego Blocks"
- Django新手需要注意的10个要点
- django环境搭建
- django book学习笔记――模板
- 第三方应用如何调用google maps导航或显示某个区域的地图
- category、protocol、delegate总结
- Dragon Balls
- Argument 'xxx' is not a function, got undefined,初学Angular的第一个坑
- 小点滴——Lingo的非线性规划、最优化求解
- androd 百度地图去除logo,放大图标
- HDU 3635 Dragon Balls(并查集)
- Go 基础之数据类型、变量
- uva5318 The Goddess Of The Moon dp+矩阵快速幂