【PAT A-1013】Battle Over Cities

C++代码

方法一:深搜

// DFS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
#include<bits/stdc++.h>
using namespace std;
using gg = long long;
const gg MAX = 1005;
vector<vector<gg>> graph(MAX);
vector<bool> visit(MAX);
void dfs(gg v) {visit[v] = true;for (gg i : graph[v]) {if (not visit[i]) {dfs(i);}}
}
int main() {ios::sync_with_stdio(false);cin.tie(0);gg ni, mi, ki, ai, bi;cin >> ni >> mi >> ki;for (gg i = 0; i < mi; ++i) {cin >> ai >> bi;graph[ai].push_back(bi);graph[bi].push_back(ai);}while (ki--) {cin >> ai;fill(visit.begin(), visit.begin() + ni + 1, false);visit[ai] = true;gg num = 0;for (gg i = 1; i <= ni; ++i) {if (not visit[i]) {++num;dfs(i);}}cout << num - 1 << "\n";}return 0;
}

方法二:并查集

//并查集
#include <bits/stdc++.h>
using namespace std;
using gg = long long;
const gg MAX = 1005;
vector<gg> ufs(MAX);
void init() { iota(ufs.begin(), ufs.end(), 0); }
gg findRoot(gg x) { return ufs[x] == x ? x : ufs[x] = findRoot(ufs[x]); }
void unionSets(gg a, gg b) { ufs[findRoot(a)] = findRoot(b); }
int main() {ios::sync_with_stdio(false);cin.tie(0);gg ni, mi, ki, ai;cin >> ni >> mi >> ki;vector<array<gg, 2>> edges(mi);for (auto& e : edges) {cin >> e[0] >> e[1];}while (ki--) {cin >> ai;init();for (auto& e : edges) {if (e[0] != ai and e[1] != ai) {  //边的两端点都不是ai,可以进行合并unionSets(e[0], e[1]);}}gg num = 0;  //记录连通分量的数量for (gg i = 1; i <= ni; ++i) {  //计算不包括ai的集合个数if (i != ai and i == ufs[i]) {++num;}}cout << num - 1 << "\n";}return 0;
}

【PAT A-1013】Battle Over Cities相关推荐

  1. 【PAT甲级 - 1013】Battle Over Cities (25分)(并查集)

    题干: It is vitally important to have all the cities connected by highways in a war. If a city is occu ...

  2. 【PAT (Basic Level) 】1030 完美数列 (25 分)

    给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列. [输入 ...

  3. 【PAT (Basic Level) 】1028 人口普查 (20 分)

    某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人.这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过 200 岁的老人,而今天是 2014 ...

  4. 【PAT (Basic Level) 】1025 反转链表 (25 分)

    给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4:如果 K 为 4,则输出应该 ...

  5. 【PAT (Basic Level) 】1015 德才论 (25 分)

    宋代史学家司马光在<资治通鉴>中有一段著名的"德才论":"是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君子 ...

  6. 【PAT (Basic Level) 】1014 福尔摩斯的约会 (20 分)

    大侦探福尔摩斯接到一张奇怪的字条: 我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm 大侦探很快就明白了,字条上 ...

  7. 【PAT (Basic Level) 】1024 科学计数法 (20 分)

    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [±][1-9].[0-9]+E[±][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部 ...

  8. 【PAT - 甲级1003】Emergency (25分)(Dijkstra,最短路条数,双权值最短路)

    题干: As an emergency rescue team leader of a city, you are given a special map of your country. The m ...

  9. 【PAT甲级A1003 】Emergency (25分)(c++)

    1003 Emergency (25分) 作者:CHEN, Yue 单位:浙江大学 代码长度限制:16 KB 时间限制:400 ms 内存限制:64 MB As an emergency rescue ...

  10. 【PAT甲级题解】1097 Deduplication on a Linked List (25分)

    Deduplication意为重复数据消除,Deplicated意为复制,是deduplication的过去式,题干大意为给定一个单链表L要求你对每一个结点的值判断,如果这个值的绝对值是第一次出现,那 ...

最新文章

  1. 17.07.26 Oracle安装
  2. 1.4建立网站的基本流程
  3. 小姐姐亲身体验:在阿里数据库科研团队实习是种怎样的体验?
  4. Ubuntu 16.04 LTS apt-get connect refuse Unable to connect to 127.0.0.1:1080
  5. OSPF的LSA类型~
  6. 腾讯 开源软件列表-开源中国社区
  7. python缺失值填充均值法_pandas 使用均值填充缺失值列的小技巧分享
  8. 计算机密码忘了 开不了机怎么办,电脑设了开机密码现在忘了开不了机怎么处理?...
  9. 【C语言】scanf()输入浮点型数据
  10. html层重叠,HTML/CSS相关问题 z-Index层重叠顺序
  11. JavaScript Tree 功能强大,包含checkbox,自动选择子节点和父节点.
  12. 利用unlocker在VMware里解锁macOS操作系统
  13. 智能云服务器选型,智能主机概述、选型及应用
  14. HTML5视频与字幕使用的介绍
  15. vue3 - 仿 element-ui Breadcrumb 面包屑组件封装自己的面包屑组件
  16. 如何快速三个月成为一个领域的高手的四个方法
  17. bzoj5148:[BeiJing2018]Kakuro
  18. 在SQL中删除重复记录(多种方法) [转]
  19. HTTPS/HTTP网络代理
  20. mybatis执行流程

热门文章

  1. 英文电子书下载:salttiger.com
  2. 单片机常用之晶振电路工作原理简述
  3. veu中点击商品详情打开新窗口
  4. html背景颜色渐变色代码,css3背景渐变色代码
  5. [转载]八种常见的防盗链方法总结及分析
  6. php如何解析QQ音乐,QQ音乐解析接口分享
  7. alios thing - rhino内核 - 内存管理
  8. 安装 Vmware和创建虚拟机即密码破解
  9. 人力资源管理系统课程设计
  10. vscode 设置关键字高亮显示