hdu3635 Dragon Balls(带权并查集)

简介: 1 /* 2 题意:有N个城市, 每一个城市都有一个龙珠(编号与城市的编号相同),有两个操作 3 T A ,B 将标号为A龙珠所在城市的所有的龙珠移动到B龙珠所在城市中! 4 5 思路:并查集 (压缩路径的时候将龙珠移动的次数进行更新) 6 *...
 1 /*
 2    题意:有N个城市, 每一个城市都有一个龙珠(编号与城市的编号相同),有两个操作
 3    T A ,B 将标号为A龙珠所在城市的所有的龙珠移动到B龙珠所在城市中! 
 4    
 5    思路:并查集 (压缩路径的时候将龙珠移动的次数进行更新) 
 6 */
 7 #include<iostream> 
 8 #include<cstring>
 9 #include<cstdio>
10 #include<algorithm>
11 #define M 10005
12 using namespace std;
13 
14 int f[M];//表示龙珠 i 所在的城市标号 
15 int Tcnt[M];//记录每个龙珠移动的次数 
16 int Scnt[M];//记录每个城市中龙珠总个数 
17 
18 int getFather(int x){
19    if(x==f[x])
20      return x;
21    
22    int ff=getFather(f[x]); 
23    Tcnt[x]+=Tcnt[f[x]];//每一个龙珠移动的次数+=其依附的父亲龙珠移动的次数 
24    f[x]=ff;
25    return f[x]; 
26 }
27 
28 void Union(int a, int b){
29    int fa=getFather(a);
30    int fb=getFather(b);
31    if(fa==fb) return;
32    f[fa]=fb;
33    Scnt[fb]+=Scnt[fa];//将fa城市的龙珠全部移动到fb城市中! 
34    Scnt[fa]=0;
35    Tcnt[fa]+=1;//a球移动次数+1 
36 } 
37 
38 int main(){
39    int t, a, b;
40    int n, m;
41    char ch[2];
42    scanf("%d", &t);
43    for(int cc=1; cc<=t; ++cc){
44           printf("Case %d:\n", cc); 
45        scanf("%d%d", &n, &m);
46        memset(Tcnt, 0, sizeof(int)*(n+1));
47        for(int i=1; i<=n; ++i)
48           f[i]=i, Scnt[i]=1;
49        while(m--){
50           scanf("%s", ch);
51           if(ch[0]=='T'){
52              scanf("%d%d", &a, &b);
53              Union(a, b); 
54           }
55           else {
56              scanf("%d", &a);
57              int ff = getFather(a);
58              printf("%d %d %d\n", ff, Scnt[ff], Tcnt[a]); 
59           }          
60        }
61    } 
62    return 0;
63 }

 

目录
相关文章
|
移动开发 前端开发
RN运行项目Error:Unable to resolve module
RN运行项目Error:Unable to resolve module
1224 0
RN运行项目Error:Unable to resolve module
|
Java 数据安全/隐私保护 Android开发
如何查看签名后的jks文件信息(查看应用签名)
如何查看签名后的jks文件信息(查看应用签名)
4312 0
如何查看签名后的jks文件信息(查看应用签名)
|
5月前
|
Python
解决Python报错:DataFrame对象没有concat属性的多种方法(解决方案汇总)
总的来说,解决“DataFrame对象没有concat属性”的错误的关键是理解concat函数应该如何正确使用,以及Pandas库提供了哪些其他的数据连接方法。希望这些方法能帮助你解决问题。记住,编程就像是解谜游戏,每一个错误都是一个谜题,解决它们需要耐心和细心。
237 15
|
搜索推荐 大数据 数据处理
数据特点
数据特点
285 8
|
存储 设计模式 监控
运用Unity Profiler定位内存泄漏并实施对象池管理优化内存使用
【7月更文第10天】在Unity游戏开发中,内存管理是至关重要的一个环节。内存泄漏不仅会导致游戏运行缓慢、卡顿,严重时甚至会引发崩溃。Unity Profiler作为一个强大的性能分析工具,能够帮助开发者深入理解应用程序的内存使用情况,从而定位并解决内存泄漏问题。同时,通过实施对象池管理策略,可以显著优化内存使用,提高游戏性能。本文将结合代码示例,详细介绍如何利用Unity Profiler定位内存泄漏,并实施对象池来优化内存使用。
1029 0
|
机器学习/深度学习 数据挖掘 开发者
|
开发工具 Android开发
Flutter: Android SDK not found at this location,Android Studio not found at xxx
Flutter: Android SDK not found at this location,Android Studio not found at xxx
404 2
|
数据安全/隐私保护
Element UI 密码输入框--可切换显示隐藏,自定义图标
Element UI 密码输入框--可切换显示隐藏,自定义图标
525 0
|
Java 应用服务中间件 程序员
无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]
无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]
1527 0
无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]
|
数据挖掘 C++
【SPSS】单样本K-S检验和两独立样本K-S检验详细操作教程(附案例实战)
【SPSS】单样本K-S检验和两独立样本K-S检验详细操作教程(附案例实战)
1616 0