L2-013 红色警报 (25分)
战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。
输入格式:

输入在第一行给出两个整数N(0 < N ≤ 500)和M(≤ 5000),分别为城市个数(于是默认城市从0到N-1编号)和连接两城市的通路条数。随后M行,每行给出一条通路所连接的两个城市的编号,其间以1个空格分隔。在城市信息之后给出被攻占的信息,即一个正整数K和随后的K个被攻占的城市的编号。
注意:输入保证给出的被攻占的城市编号都是合法的且无重复,但并不保证给出的通路没有重复。
输出格式:

对每个被攻占的城市,如果它会改变整个国家的连通性,则输出Red Alert: City k is lost!,其中k是该城市的编号;否则只输出City k is lost.即可。如果该国失去了最后一个城市,则增加一行输出Game Over.。
输入样例:

5 4
0 1
1 3
3 0
0 4
5
1 2 0 4 3
输出样例:

City 1 is lost.
City 2 is lost.
Red Alert: City 0 is lost!
City 4 is lost.
City 3 is lost.
Game Over.

#include<iostream>
using namespace std;
const int maxn1 = 500;
const int maxn2 = 5005;
int count1 = 0;//统计当前的联通分量个数
int pre[maxn1];
struct edge {int x, y;
}e[maxn2];
int find(int x)//并查集模板,查找
{while (x != pre[x]) x = pre[x];return x;
}
void merge(int x, int y)//并查集模板,合并
{int a = find(x);int b = find(y);if (a != b) pre[a] = b;
}
void init()
{for (int i = 0; i < maxn1; i++) pre[i] = i;//初始化pre数组
}
int main()
{int n, k, x, y;cin >> n >> k;init();for (int i = 0; i < k; i++)//将边存入结构体{cin >> x >> y;e[i].x = x;e[i].y = y;merge(x, y);//合并边}for (int i = 0; i < n; i++){if (pre[i] == i)count1++;//联通分类个数,即独立的块数}int flag[maxn1]{ 0 };int h;cin >> h;for (int i = 0; i < h; i++){cin >> x;//输入被攻占城市编号init();flag[x] = 1;//标记该城市被攻占int count2 = 0;//记录被攻占后的城市的联通分量个数for (int z = 0; z < k; z++){if (flag[e[z].x] == 0 && flag[e[z].y] == 0)//如果该道路的两个城市都未被攻占{merge(e[z].x, e[z].y);//合并}}for (int j = 0; j < n; j++){if (pre[j] == j && flag[j] == 0)//如果未被攻占且pre[j]==j;{count2++;//记录当前的联通分量数;}}if (count2 > count1)//联通分量大于该城市被攻占前的,红色警报printf("Red Alert: City %d is lost!\n", x);else//小于等于,只是丢失printf("City %d is lost.\n", x);if (count2 == 0)printf("Game Over.\n");count1 = count2;//被攻占后,更新当前的联通分量}
}

C++学习之路 | PTA(天梯赛)—— L2-013 红色警报 (25分)(带注释)(并查集)(精简)相关推荐

  1. C++学习之路 | PTA(天梯赛)—— L3-003 社交集群 (30分) (带注释) (并查集) (精简)

    L3-003 社交集群 (30分) 当你在社交网络平台注册时,一般总是被要求填写你的个人兴趣爱好,以便找到具有相同兴趣爱好的潜在的朋友.一个"社交集群"是指部分兴趣爱好相同的人的集 ...

  2. C++学习之路 | PTA乙级—— 1040 有几个PAT (25 分)(精简)

    1040 有几个PAT (25 分) 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位§,第 4 位 ...

  3. C++学习之路 | PTA(甲级)—— 1114 Family Property (25分)(带注释)(并查集)(精简)

    1114 Family Property (25分) This time, you are supposed to help us collect the data for family-owned ...

  4. C++学习之路 | PTA乙级—— 1005 继续(3n+1)猜想 (25分)(精简)

    1005 继续(3n+1)猜想 (25分) 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中 ...

  5. C++学习之路 | PTA(天梯赛)—— L2-007 家庭房产 (25分)(带注释)(并查集)(精简)

    L2-007 家庭房产 (25分) 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按 ...

  6. C++学习之路 | PTA(天梯赛)—— L2-010 排座位 (25分)(带注释)(并查集)(精简)

    L2-010 排座位 (25分) 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位.无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他 ...

  7. C++学习之路 | PTA乙级—— 1036 跟奥巴马一起编程 (15 分)(精简)

    1036 跟奥巴马一起编程 (15 分) 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014 年底,为庆祝"计算机科学教育周&qu ...

  8. PTA 天梯赛L1 7-3 跳一跳 (15 分) C语言AC题解【仅供分享】

    微信小程序中的跳一跳相信大家都玩过.emmm???只学习不玩游戏?那就吃亏了-好好读题理解吧. 简化后的跳一跳规则如下:玩家每次从当前方块跳到下一个方块,如果没有跳到下一个方块上则游戏结束. 如果跳到 ...

  9. C++学习之路 | PTA乙级—— 1087 有多少不同的值 (20 分)(精简)

    1087 有多少不同的值 (20 分) 当自然数 n 依次取 1.2.3.--.N 时,算式 ⌊n/2⌋+⌊n/3⌋+⌊n/5⌋ 有多少个不同的值?(注:⌊x⌋ 为取整函数,表示不超过 x 的最大自然 ...

最新文章

  1. IT大数据服务管理高级课程(IT服务,大数据,云计算,智能城市)
  2. centos不允许root直接登陆
  3. Ghost 系统的过程
  4. LeaFlet学习之结合turf.js生成简单的等值线demo
  5. html5编游戏好难,分享微信开发Html5轻游戏中的几个坑
  6. IDEA的十大快捷键
  7. Spring中的异步和事务性事件侦听器
  8. 分布式事务模型--XA Specification
  9. 前端工程师技能之photoshop巧用系列扩展篇——自动切图
  10. Cisco3550三层交换机vlan间路由配置实例
  11. java之classpath到底是什么
  12. 研发效能提升的八项实践建议
  13. 四种插入数据的MySQL语句比较
  14. windows 无法停止ics_Win10系统ICS服务启动后停止怎么办
  15. c#字符串全角转半角
  16. 第一天送宇轩去幼儿园
  17. 小学期 异形:达达学长的生死逃亡
  18. AUTOCAD——设置文字间距与行距
  19. Cortex-M3 (NXP LPC1788)之RTC
  20. C语言第13课——文件读写

热门文章

  1. Promise源码解析
  2. 国科大高级人工智能-总结
  3. 秒懂系列 | 史上最简单的Python Django入门教程
  4. http协议的状态码400,401,403,404,500,502,503,301,302等常见网页错误代码
  5. Centos 6.5部署nginx+uwsgi+django
  6. 解决sublime3不能编辑插件default settings的问题
  7. [问题解决]同时显示多个Notification时PendingIntent的Intent被覆盖?
  8. springboot学习笔记-01-springboot-helloworld的编写以及原理初步了解(自动装配)
  9. linux的基础知识——TCP异常断开
  10. 【开源】iTest教学辅助系统源代码