hdu 3635 Dragon Balls 【基础带权并查集】

Dragon Balls

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 3461    Accepted Submission(s): 1348

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

分析:此题很明显是带权并查集裸体,值得注意的一点是如果城市A的龙珠被带到城市B,则从此不会有其它城市龙珠被带到城市A

  • #include<stdio.h>
  • #include<string.h>
  • #include<algorithm>
  • #include<iostream>
  • #define maxh 10000+10
  • using namespace std;
  • int set[maxh],move[maxh],rank[maxh];
  • void init(int n)
  • {
  • for(int i=0;i<=n;i++)
  • {
  • set[i]=i,move[i]=0,rank[i]=1;
  • }
  • }
  • int findx(int x)
  • {
  • if(x==set[x])
  • {
  • return x;
  • }
  • else
  • {
  • int p=set[x];
  • set[x]=findx(set[x]);
  • move[x]+=move[p];
  • }
  • return set[x];
  • }
  • void fun(int x,int y)
  • {
  • x=findx(x);
  • y=findx(y);
  • if(x!=y)
  • {
  • set[x]=y;
  • move[x]++;
  • rank[y]+=rank[x];
  • rank[x]=0;
  • }
  • }
  • int main()
  • {
  • char c[3];
  • int T,a,b,n,m,temp;
  • scanf("%d",&T);
  • for(int t=1;t<=T;t++)
  • {
  • scanf("%d%d",&n,&m);
  • init(n);
  • printf("Case %d:\n",t);
  • for(int i=0;i<m;i++)
  • {
  • scanf("%s",c);
  • if(c[0]==‘T‘)
  • {
  • scanf("%d%d",&a,&b);
  • fun(a,b);
  • }
  • else
  • {
  • scanf("%d",&a);
  • temp=findx(a);
  • printf("%d %d %d\n",temp,rank[temp],move[a]);
  • }
  • }
  • }
  • return 0;
  • }
时间: 2024-08-10 23:26:59

hdu 3635 Dragon Balls 【基础带权并查集】的相关文章

HDU3635 Dragon Balls (带权并查集)

Dragon Balls Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10628    Accepted Submission(s): 3802 Problem Description Five hundred years later, the number of dragon balls will increase unexpect

HDU3635 Dragon Balls(带权并查集)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3635 题目描述: Dragon Balls 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 bal

hdu 1558 Segment set【基础带权并查集+计算几何】

Segment set Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3599    Accepted Submission(s): 1346 Problem Description A segment and all segments which are connected with it compose a segment set

hdu 2818 Building Block【基础带权并查集】

Building Block Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3365    Accepted Submission(s): 1009 Problem Description John are playing with blocks. There are N blocks (1 <= N <= 30000) numbe

HDU 2818 Building Block(带权并查集)

[题目链接]:Click here~~ [题意]: 给 n 块砖头,开始各为一堆,两种操作: 1.把 X 所在的那一堆箱子里的砖头放到 Y 所在的那一堆上面. 2.询问 X 下面有多少块砖. [解题思路]:好像大家都叫它带权并查集,那为了方便,这里也这样叫吧,因为涉及前面的和后面的箱子个数,对应的查找操作,一开始想用结构体来写,在结构体里定义每个箱子的前驱和后继,每次输入的时候统计一下相应的前驱和后继的个数,后来发现不行,因为涉及到合并操作,比如说M 2 4 M 2 6连续出现两个2,用结构体是

hdu 3074 Zjnu Stadium (带权并查集)

Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1744    Accepted Submission(s): 660 Problem Description In 12th Zhejiang College Students Games 2007, there was a new stadium built i

HDU(1856),裸的带权并查集

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1856 题意:朋友圈问题,A和B是朋友,B和C是朋友则A和C也是朋友,依次类推,题目的意思就是求最大的朋友圈,即求最大集合中元素的个数.裸的并查集加个秩数组就行了. #include <stdio.h> int father[100050]; int rank[100050]; int Find_Set (int x) { if(x!=father[x]) father[x] = Find_Set(

hdu 3047 Zjnu Stadium【带权并查集】

In 12th Zhejiang College Students Games 2007, there was a new stadium built in Zhejiang Normal University. It was a modern stadium which could hold thousands of people. The audience Seats made a circle. The total number of columns were 300 numbered 1

HDU 3047 Zjnu Stadium(带权并查集,难想到)

M - Zjnu Stadium Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Description In 12th Zhejiang College Students Games 2007, there was a new stadium built in Zhejiang Normal University. It was a modern stadium