(并查集) hdu 3635

Dragon Balls

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3443    Accepted Submission(s): 1342

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

Author

possessor WC

压缩路径需要多想想

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<algorithm>
#include<cstdlib>
using namespace std;
#define maxn 1000010
int n,tt,m,fa[maxn],city[maxn],trans[maxn];
char s[10];
int find(int x)
{
      if(x==fa[x])
            return x;
      int k=fa[x];
      fa[x]=find(fa[x]);
      trans[x]+=trans[k];
      return fa[x];
}
void Union(int x,int y)
{
      int fx,fy;
      fx=find(x),fy=find(y);
      if(fx!=fy)
      {
            fa[fx]=fy;
            trans[fx]++;
            city[fy]+=city[fx];
            city[fx]=0;
      }
}
int main()
{
      int a,b,cas=1;
      scanf("%d",&tt);
      while(tt--)
      {
            printf("Case %d:\n",cas);
            scanf("%d%d",&n,&m);
            for(int i=0;i<=n;i++)
                  fa[i]=i,city[i]=1,trans[i]=0;
            for(int i=0;i<m;i++)
            {
                  scanf("%s",s);
                  if(s[0]==‘T‘)
                  {
                       scanf("%d%d",&a,&b);
                       Union(a,b);
                  }
                  else if(s[0]==‘Q‘)
                  {
                        scanf("%d",&a);
                        int k=find(a);
                        printf("%d %d %d\n",k,city[k],trans[a]);
                  }
            }
            cas++;
      }
      return 0;
}

  

时间: 2024-11-07 10:07:53

(并查集) hdu 3635的相关文章

并查集 -- HDU 1232 UVALA 3644

并查集: 1 int pa[maxn],Rank[maxn]; 2 ///初始化 x 集合 3 void make_set(int x) 4 { 5 pa[x]=x; 6 Rank[x]=0; 7 } 8 ///递归查找 x 所在的集合 9 int find_set(int x) 10 { 11 if(pa[x]!=x) pa[x]=find_set(pa[x]); 12 return pa[x]; 13 } 14 ///更新根节点,如果不更新可能会暴栈 15 void mix(int x,in

集合问题 离线+并查集 HDU 3938

题目大意:给你n个点,m条边,q个询问,每条边有一个val,每次询问也询问一个val,定义:这样条件的两个点(u,v),使得u->v的的价值就是所有的通路中的的最长的边最短.问满足这样的点对有几个. 思路:我们先将询问和边全部都按照val排序,然后我们知道,并查集是可以用来划分集合的,所以我们就用并查集来维护每一个集合就行了. //看看会不会爆int!数组会不会少了一维! //取物问题一定要小心先手胜利的条件 #include <bits/stdc++.h> using namespac

并查集 hdu 1856

More is better Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 327680/102400 K (Java/Others) Total Submission(s): 16863    Accepted Submission(s): 6205 Problem Description Mr Wang wants some boys to help him with a project. Because the projec

(并查集) hdu 2473

Junk-Mail Filter Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6389    Accepted Submission(s): 2025 Problem Description Recognizing junk mails is a tough task. The method used here consists o

分组并查集 hdu 1829

A Bug's Life Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 10063    Accepted Submission(s): 3288 Problem Description Background Professor Hopper is researching the sexual behavior of a rare

(枚举+并查集) hdu 1598

find the most comfortable road Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4096    Accepted Submission(s): 1768 Problem Description XX星有许多城市,城市之间通过一种奇怪的高速公路SARS(Super Air Roam Structure---超级

(并查集) hdu 4750

Count The Pairs Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 952    Accepted Submission(s): 422 Problem Description   With the 60th anniversary celebration of Nanjing University of Science

(并查集) hdu 3038

How Many Answers Are Wrong Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2856    Accepted Submission(s): 1100 Problem Description TT and FF are ... friends. Uh... very very good friends -_____

(并查集) hdu 3461

Code Lock Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 1308    Accepted Submission(s): 471 Problem Description A lock you use has a code system to be opened instead of a key. The lock contai