数据结构与算法实验题 9.8 转移炸弹
★实验任务
A国有 N个城市,这些城市编号为 1到 N,有一天,他们调查出恐怖分子在每个城市中都安放了炸弹,于是他们给炸弹也编上了序号,第 i 个城市里的炸弹编号为 i。现在他们想把这些炸弹转移,以便于销毁炸弹。
由于炸弹是通过不同人转移的,所以需要一个指挥部门来记录转移炸弹的信息,以便于有些人要查询这些信息。我们有两个操作:
1.将 a 炸弹目前所在城市中所有的炸弹转移到 b 炸弹所在的城市。
2.询问 a 炸弹目前在哪个城市编号和这个城市中有炸弹个数。
★数据输入
输入第一行包含两个数 N,Q(1<=N<=500000 , 1<=Q<=120000)。分别表示城市的个数和操作数。
接下来有 Q 行,每行表示一个操作,第一种操作输入格式为 1 a b,第二种操作输入格式为 2 a。(1<=a,b<=N)
★数据输出
对于第一个操作,如果两个炸弹在同一个城市里,输出“ERROR”,并不执行此操作。否则执行操作并不输出任何东西。
对于第二种操作,输出一行两个数表示炸弹所在的城市编号和该城市中炸弹个数,用一个空格分开。
输入示例1
3 3
1 1 2
1 3 2
2 2
输出示例1
2 3
输入示例2
3 5
1 1 2
1 2 1
2 1
1 1 3
2 1
输出示例2
ERROR
2 2
3 3
思路:本题用到并查集的思想,将题目给的两个操作看作是并和查,炸弹作为集合,初始时每个炸弹都属于自己的集合。
代码:
#pragma GCC optimize(2) //开O2优化
#include <cstdio>
#define MAX 500000int Boomb[MAX]; //初始化为-1
void BoombInit(int size)
{for(int i=1; i<=size; i++){Boomb[i] = -1;} return ;
}//查找x所在的城市
int UFFind(int root)
{ if(Boomb[root]<0) //如果父结点小于零 那么说明 已经是根节点 那么根就在自己 return root; int son, tmp; son = root; while(Boomb[root]>=0){ //寻找城市 root = Boomb[root]; } //路径压缩 再从最开始到根 while(son!=root){ tmp = Boomb[son]; //原本的上级 Boomb[son] = root; //将上级直接指向root son = tmp; } return root; //返回树根
}//a合并到b
void UFUnion(int a, int b)
{ a = UFFind(a); //找这俩的爸爸 如果相等 就返回 b = UFFind(b);if(a==b){printf("ERROR\n");return ; //已经在同一座城市里 }Boomb[b]+=Boomb[a]; //此时b要并到a上 那么a 要加上b中的炸弹个数 Boomb[a] = b; //然后再将b的父亲改为areturn ; //成功合并
}
int main(void)
{ int N, Q; int a, b, instruct; scanf("%d %d", &N, &Q); BoombInit(N);while(Q--){ scanf("%d", &instruct); if(instruct==1){ scanf("%d %d", &a, &b); UFUnion(a, b); }else{ scanf("%d", &a); int tmp = UFFind(a);printf("%d %d\n", tmp, -Boomb[tmp]); } }return 0;
}
数据结构与算法实验题 9.8 转移炸弹相关推荐
- 数据结构与算法实验题 4.2 Who is the strongest
数据结构与算法实验题 4.2 Who is the strongest ★实验任务 在神奇的魔法世界,召唤师召唤了一群的魁偶.这些魁偶排成一排,每个魁偶都有一个 战斗值.现在该召唤师有一个技能,该技能 ...
- 数据结构与算法实验题 6.1 鼹鼠掘土挑战赛
数据结构与算法实验题 6..1 鼹鼠掘土挑战赛 ★实验任务 在潘多拉星的哈利路亚山上,生活着许多鼹鼠矿工,它们同属于潘多拉矿业公司哈利路 亚分公司.尽管在潘多拉星最美丽壮阔的地方工作,是一件十分让普通 ...
- 数据结构与算法实验题 10.1 神谕者
★实验任务 众所周知,dota 中神谕者的大招可以抵挡所有伤害,但是当大招结束时会一次性结算所有伤害.神谕者在大招期间已经遭受了 n 次伤害,他现在希望知道自己所遭受伤害中的第 k 小伤害值,但是他 ...
- 数据结构与算法实验题 7.2 连环计
问题描述: 赤壁之战前夕,庞统向周瑜献连环计,瑜设计使蒋干邀庞统到曹营.操与统同观营寨,又共论兵法.统对答如流使操敬服.统乘机提出:大江中风浪不息使北兵易生疾病.可将大 小船配搭,首尾用铁环连锁,铺阔 ...
- 数据结构与算法实验题7.2 连环计
问题描述: 赤壁之战前夕,庞统向周瑜献连环计,瑜设计使蒋干邀庞统到曹营.操与统同观营寨, 又共论兵法.统对答如流使操敬服.统乘机提出:大江中风浪不息使北兵易生疾病.可将大 小船配搭,首尾用铁环连锁,铺 ...
- c语言编写队列元素逆置,数据结构与算法实验—利用栈逆置队列元素.doc
数据结构与算法实验-利用栈逆置队列元素 利用栈逆置队列元素实验报告 通信1204班 谢崇赟 实验名称 利用堆栈将队列中的元素逆置 实验目的 会定义顺序栈和链栈的结点类型. 掌握栈的插入和删除结点在操作 ...
- Ants (POJNo.1852)--数据结构与算法刷题记录
数据结构与算法刷题记录1 时间:4.28 这是第一次用CSDN来记录自己的学习成果,在此留下纪念,希望自己能够坚持下去,变得更强. 本次学习记录来源于<挑战程序设计竞赛(第2版)> Ant ...
- 一夜登顶GitHub!字节内网数据结构与算法刷题笔记,看完直呼卧槽
网络上流传着一句段子"程序员两条腿,一条是算法,一条是英文,想跑的更远,这两条腿都不能弱".英文,我们暂且不谈,我们先来谈谈算法. 算法之难,在于将精巧的逻辑,通过合适的数据结构, ...
- 面试题库 之 数据结构与算法 100题
1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. 要求不能创建任何新的结点,只调整指针的指向. 10 / \ 6 14 / \ / \ 4 8 ...
最新文章
- RPM vs SRPM
- 基于框架的应用系统的质量属性
- 软考 - 法律法规 标准化
- C. Valera and Elections DFS
- #CSP 201709-1 打酱油
- 杀毒行业暴利?8条杀毒行业之我见
- [Android6.0][RK3399] PCIe 接口 4G模块 EC20 调试记录
- 独立树Graph Coloringhttp://poj.org/problem?id=1419最大团问题
- 转 Java多线程中Sleep与Wait的区别
- flash builder 4.6 的破解安装
- 安卓psp模拟器哪个好_psp模拟器安卓完美版下载_psp模拟器完美版手机版下载_玩游戏网...
- kmplayer音轨切换(换配音)
- XMU 1614 刘备闯三国之三顾茅庐(二) 【逆向思维+二维并查集】
- PhotoSweeper X for Mac(重复照片快速清理软件)
- 通过英文剧集、电影学单词的小工具
- 开启xmp1还是2_英雄联盟手游高帧率模式怎么开启-高帧率模式开启方法
- 台湾--身份证(本国人)正则表达式
- SecureFX中文乱码,而SecureCRT中文显示正常
- 现在的网页该不该兼容IE6/7
- php字符串转数组函数,php字符串转数组