PAT甲级1013. Battle Over Cities
PAT甲级1013. Battle Over Cities
题意:
将所有城市连接起来的公路在战争中是非常重要的。如果一个城市被敌人占领,所有从这个城市的高速公路都是关闭的。我们必须立即知道,如果我们需要修理任何其他高速公路,以保持其他城市的连接。鉴于所有其余高速公路标记的城市地图,
你应该告诉高速公路需要修理的次数很快。
例如,如果我们有3个城市和2个连接city1-city2和city1-city3的高速公路3。那么如果city1被敌人占领,那么我们必须有1条公路修好,那就是高速公路city2-city3。
输入
每个输入文件包含一个测试用例。
每个案例分别以3号数字N(<1000),M和K分别开始,分别是城市总数,剩余高速公路数和待检查城市数。然后M行跟随,每个描述一条公路由2个整数,这是高速公路连接的城市的数量。
城市的编号从1到N.最后有一行包含K个数字,代表我们关心的城市。
输出
对于每个K个城市,如果该城市丢失,一条线上的公路数量需要修复。
思路:
求连通支路。并查集或者dfs都可以。
ac代码:
C++ 并查集
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<unordered_map>
#include<cstring>
using namespace std;
const int maxn = 1005;
int mapx[maxn * maxn][2];
int pre[maxn];
int Find(int x)
{
return pre[x] == x ? x : pre[x] = Find(pre[x]);
}
void Union(int x, int y)
{
x = Find(x);
y = Find(y);
if (x == y) return;
pre[y] = x;
}
int main()
{
int n, m, k, sum;
cin >> n >> m >> k;
memset(mapx, 0, sizeof(mapx));
for (int i = 0; i < m; i++)
{
cin >> mapx[i][0] >> mapx[i][1];
}
int city;
while (k--)
{
cin >> city;
for (int i = 0; i <= n; i++)
{
pre[i] = i;
}
for (int i = 0; i < m; i++)
{
if (mapx[i][0] != city && mapx[i][1] != city)
Union(mapx[i][0], mapx[i][1]);
}
sum = 0;
for (int i = 1; i <= n; i++)
{
if (pre[i] == i && i != city)
sum++;
}
cout << sum - 1 << endl;
}
return 0;
}
C++ dfs
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<unordered_map>
#include<cstring>
using namespace std;
const int maxn = 1005;
int visit[maxn];
int link[maxn][maxn];
int n, m, k;
void dfs(int x)
{
visit[x] = 1;
for (int i = 1; i <= n; i++)
{
if (visit[i] != 1 && link[i][x] == 1)
dfs(i);
}
}
int main()
{
cin >> n >> m >> k;
int city1, city2;
memset(link, 0, sizeof(link));
for (int i = 0; i < m; i++)
{
cin >> city1 >> city2;
link[city1][city2] = 1;
link[city2][city1] = 1;
}
int misscity;
int count;
for (int i = 0; i < k; i++)
{
cin >> misscity;
count = 0;
memset(visit, 0, sizeof(visit));
visit[misscity] = 1;
for (int i = 1; i <= n; i++)
{
if (visit[i] != 1)
{
dfs(i);
count++;
}
}
cout << count - 1 << endl;
}
return 0;
}
PAT甲级1013. Battle Over Cities的更多相关文章
- 图论 - PAT甲级 1013 Battle Over Cities C++
PAT甲级 1013 Battle Over Cities C++ It is vitally important to have all the cities connected by highwa ...
- PAT 甲级 1013 Battle Over Cities (25 分)(图的遍历,统计强连通分量个数,bfs,一遍就ac啦)
1013 Battle Over Cities (25 分) It is vitally important to have all the cities connected by highway ...
- PAT A 1013. Battle Over Cities (25)【并查集】
https://www.patest.cn/contests/pat-a-practise/1013 思路:并查集合并 #include<set> #include<map> ...
- PAT甲级——A1013 Battle Over Cities
It is vitally important to have all the cities connected by highways in a war. If a city is occupied ...
- PAT Advanced 1013 Battle Over Cities (25) [图的遍历,统计连通分量的个数,DFS,BFS,并查集]
题目 It is vitally important to have all the cities connected by highways in a war. If a city is occup ...
- PAT 解题报告 1013. Battle Over Cities (25)
1013. Battle Over Cities (25) t is vitally important to have all the cities connected by highways in ...
- PAT 1013 Battle Over Cities
1013 Battle Over Cities (25 分) It is vitally important to have all the cities connected by highway ...
- PAT 1013 Battle Over Cities(并查集)
1013. Battle Over Cities (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue It ...
- pat 1013 Battle Over Cities(25 分) (并查集)
1013 Battle Over Cities(25 分) It is vitally important to have all the cities connected by highways i ...
随机推荐
- 海洋CMS v6.53 v6.54命令执行
测试下载地址:https://pan.baidu.com/s/1jHQBKFk 至于分析实在是看的一脸懵逼就不累赘了.直接上exp POST /haiyang/upload/search.php HT ...
- 16 - 文件操作-StringIO-BytesIO
目录 1 文件操作 1.1 open函数介绍 1.2 打开操作 1.2.1 mode模式 1.2.2 文件指针 1.2.3 缓冲区 1.2.4 encoding编码 1.2.5 其他参数 1.3 读写 ...
- python基础之常用的高阶函数
前言 高阶函数指的是能接收函数作为参数的函数或类:python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率. map() map函数可以把一个迭代对象转换成另一个可迭代对象,不过在pyth ...
- Codeforces Round #453 (Div. 1)
Codeforces Round #453 (Div. 1) A. Hashing Trees 题目描述:给出一棵树的高度和每一层的节点数,问是否有两棵树都满足这个条件,若有,则输出这两棵树,否则输出 ...
- Oracle创建WM_CONCAT函数
Oracle创建WM_CONCAT函数 WM_CONCAT这个函数会出错,所以从 11g开始.官方不认可 WM_CONCAT.然后就没这个函数了, 下面就是创建WM_CONCAT这个函数的步骤 第一步 ...
- Linux上java环境变量配置
1.java配置 配置环境变量在/etc/profile下增加 # set Java environment JAVA_HOME=/usr/share/jdk1.6.0_43 PATH=$JAVA_H ...
- LightOJ 1369 Answering Queries(找规律)
题目链接:https://vjudge.net/contest/28079#problem/P 题目大意:给你数组A[]以及如下所示的函数f: long long f( int A[], int n ...
- scala学习5--函数二
to def test() : Unit = { // for(i <- 1.to(100)){ // println(i) // } for(i <- 1 to 100 ){ prin ...
- [你必须知道的.NET]第十七回:貌合神离:覆写和重载
本文将介绍以下内容: 什么是覆写,什么是重载 覆写与重载的区别 覆写与重载在多态特性中的应用 1. 引言 覆写(override)与重载(overload),是成就.NET面向对象多态特性的基本技术之 ...
- 搭建 GIT 服务器
Git 是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. 此实验以 CentOS 7.2 x64 的系统为环境,搭建 git 服务器. 安装依赖库和编译工具 为了后续安装能 ...