Dragon Balls

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

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
 
题意:有n个城市,每个城市都有一个龙珠,一次T a b操作表示将a城市里面的龙珠全部转移到b城市,一次Q a操作表示问a龙珠当前在几号城市,这个城市有多少龙珠,以及龙珠
被转移了多少次。
题解:这个题难点在于计算龙珠的转移次数..要在状态压缩里面做。。我怎么没想到 - - 还有就是记录前结点一直往上找的方法。
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <map>
using namespace std;
const int N =;
int father[N];
int sum[N]; ///记录每个城市龙珠的个数
int mov[N]; ///记录每个点的移动次数
int _find(int x){
if(x!=father[x]){ ///路径压缩更新
int t = father[x];
father[x] = _find(father[x]);
mov[x]+=mov[t];
}
return father[x];
}
void Union(int a,int b){
int x = _find(a);
int y = _find(b);
if(x!=y){
father[x] = y;
mov[x]++;
sum[y]+=sum[x];
sum[x] = ; ///记得清0
}
}
int main()
{
int tcase;
int t = ;
scanf("%d",&tcase);
while(tcase--){
printf("Case %d:\n",t++);
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
father[i] = i;
sum[i] = ;
mov[i] = ;
}
while(m--){
char s[];
scanf("%s",s);
if(s[]=='T'){
int a,b;
scanf("%d%d",&a,&b);
Union(a,b);
}
else{
int a;
scanf("%d",&a);
int b = _find(a);
printf("%d %d %d\n",b,sum[b],mov[a]);
}
}
}
return ;
}

最新文章

  1. Python学习实践------正向最大匹配中文分词
  2. 【Redis安装学习】
  3. phpcms 服务器安全认证错误
  4. 导出到Excel并且取消默认的科学计算法
  5. 【SSH三大框架】Hibernate基础第二篇:编写HibernateUtil工具类优化性能
  6. libvlc media player in C# (part 2)
  7. Android自动化测试之环境搭建
  8. @JsonIgnoreProperties忽略转换到json的属性
  9. struts2 利用通配符方式解决action太多的问题
  10. C语言对函数操作的结果声明
  11. js 倒计时10s
  12. 团队作业第五周(HCL盐酸队)
  13. A2dp初始化流程源码分析
  14. Struts的JSON机制
  15. ln -s 软连接
  16. c# sql等微型代码工具LinqPad
  17. Spark Streaming自定义Receivers
  18. troubleshooting-执行Oozie调度Hive导数脚本抛java.io.IOException: output.properties data exceeds its limit [2048]
  19. 利用SignalR来同步更新Winfrom小试
  20. Uva10048 Audiophobia (Floyd)

热门文章

  1. Erlang OTP学习:supervisor [转]
  2. msql 数据库介绍和启动
  3. Spring Boot多数据源配置(二)MongoDB
  4. 一个画ROC曲线的封装包
  5. SpringBoot Rabbitmq接收消息
  6. 破解navicat
  7. BETA(1)
  8. sqlachemy 原生sql输出
  9. MIFARE Classic S50技术详解
  10. ES6 学习体会