【PAT A-1013】Battle Over Cities
【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相关推荐
- 【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 ...
- 【PAT (Basic Level) 】1030 完美数列 (25 分)
给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列. [输入 ...
- 【PAT (Basic Level) 】1028 人口普查 (20 分)
某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人.这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过 200 岁的老人,而今天是 2014 ...
- 【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,则输出应该 ...
- 【PAT (Basic Level) 】1015 德才论 (25 分)
宋代史学家司马光在<资治通鉴>中有一段著名的"德才论":"是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君子 ...
- 【PAT (Basic Level) 】1014 福尔摩斯的约会 (20 分)
大侦探福尔摩斯接到一张奇怪的字条: 我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm 大侦探很快就明白了,字条上 ...
- 【PAT (Basic Level) 】1024 科学计数法 (20 分)
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [±][1-9].[0-9]+E[±][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部 ...
- 【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 ...
- 【PAT甲级A1003 】Emergency (25分)(c++)
1003 Emergency (25分) 作者:CHEN, Yue 单位:浙江大学 代码长度限制:16 KB 时间限制:400 ms 内存限制:64 MB As an emergency rescue ...
- 【PAT甲级题解】1097 Deduplication on a Linked List (25分)
Deduplication意为重复数据消除,Deplicated意为复制,是deduplication的过去式,题干大意为给定一个单链表L要求你对每一个结点的值判断,如果这个值的绝对值是第一次出现,那 ...
最新文章
- 17.07.26 Oracle安装
- 1.4建立网站的基本流程
- 小姐姐亲身体验:在阿里数据库科研团队实习是种怎样的体验?
- Ubuntu 16.04 LTS apt-get connect refuse Unable to connect to 127.0.0.1:1080
- OSPF的LSA类型~
- 腾讯 开源软件列表-开源中国社区
- python缺失值填充均值法_pandas 使用均值填充缺失值列的小技巧分享
- 计算机密码忘了 开不了机怎么办,电脑设了开机密码现在忘了开不了机怎么处理?...
- 【C语言】scanf()输入浮点型数据
- html层重叠,HTML/CSS相关问题 z-Index层重叠顺序
- JavaScript Tree 功能强大,包含checkbox,自动选择子节点和父节点.
- 利用unlocker在VMware里解锁macOS操作系统
- 智能云服务器选型,智能主机概述、选型及应用
- HTML5视频与字幕使用的介绍
- vue3 - 仿 element-ui Breadcrumb 面包屑组件封装自己的面包屑组件
- 如何快速三个月成为一个领域的高手的四个方法
- bzoj5148:[BeiJing2018]Kakuro
- 在SQL中删除重复记录(多种方法) [转]
- HTTPS/HTTP网络代理
- mybatis执行流程