PAT 1013 Battle Over Cities (25分) 图的连通分量+DFS

1013 Battle Over Cities (25)(25 分) 1 题目 2 解题思路 3 AC代码 1 题目   It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways from/toward that city are ... 阅读详情

题目

It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways from/toward that city are closed. We must know immediately if we need to repair any other highways to keep the rest of the cities connected. Given the map of cities which have all the remaining highways marked, you are supposed to tell the number of highways need to be repaired, quickly.

For example, if we have 3 cities and 2 highways connecting city1​​ -city​2​​ and city​1
​​ -city​3​ . Then if city​1​​ is occupied by the enemy, we must have 1 highway repaired, that is the highway city​2​​ -city​3​​ .

Input Specification:
Each input file contains one test case. Each case starts with a line containing 3 numbers N (<1000), M and K, which are the total number of cities, the number of remaining highways, and the number of cities to be checked, respectively. Then M lines follow, each describes a highway by 2 integers, which are the numbers of the cities the highway connects. The cities are numbered from 1 to N. Finally there is a line containing K numbers, which represent the cities we concern.

Output Specification:
For each of the K cities, output in a line the number of highways need to be repaired if that city is lost.

Sample Input:
3 2 3
1 2
1 3
1 2 3
Sample Output:
1
0
0

题目解读

有n个城市,给出了其中几个城市之间存在路径(直接或间接),也就是连通,现在假设某个城市沦陷,和它有关联的路径全部断开,问需要修几条路才能保证剩下的城市全连通。相当于连通的城市组成一个集合,可能有好几个这样的集合,那么n个集合需要n-1条路就能全部连通。也就是说,沦陷的城市,单独作为一个集合,再去找出剩下的这些连通的集合,假如有n个,返回n-1即可。

给你一个无向图,给定某个节点,把这个节点直接关联的边全断开,然后去求连通分量的个数,最后返回连通分量的个数减1。

思路解释

一般对于求连通分量的问题,都是并查集或者DFS,我这里采用DFS,因为DFS是真的简单。

  • 用一个visit数组记录节点的访问状况,初始化全部为false。
  • dfs(int i)内,完成把和i直接关联或间接关联的节点都标记为true(邻接节点继续递归找到的就是间接相关联的),这样,一次dfs就相当于一个连通分量从整个节点集中排除出去了,我们只需要统计dfs执行了多少次才使得visit数组全为false,就能得到连通分量的个数。
  • 对于这个题,加入沦陷的城市是lost,本来应该把和它关联的划分到一起,但是因为它沦陷了,需要断开全部路径,我们只需要把visit[lost]单独设置为false再去划分别的,就能达到将他排除在外的效果。

满分代码

注释很详细,大家自己看吧,啦啦啦。。。

#include <iostream>
#include <algorithm>
using namespace std;
/**
 * 有n个城市,给出了其中几个城市直接存在路(直接或间接),也就是连通,
 * 现在假设某个城市沦陷,和它有关联的路径全部断开,问需要修几条路才能保证剩下的城市全连通
 *
 * 相当于连通的城市组成一个集合,可能有好几个这样的集合,那么n个集合需要n-1条路就能全部连通
 *
 * 也就是说,沦陷的城市,单独作为一个集合,再去找出剩下的这些连通的集合,假如有n个,返回n-1即可
 *
 */
// 邻接矩阵,节点编号 1-1000
bool graph[1001][1001];
// 用是否访问来划分连通的集合
bool visit[1001];

// 有几个城市
int g_nodes;

// 每一次dfs,都把和这个城市连通的所有城市标记为以访问,这样就相当于划分出一个集合,统计这个函数执行了几次就能知道划分出了几个集合
void dfs(int node) {
    // 标记自己
    visit[node] = true;
    // 找到和他连通的,且没有标记过的,进行标记,划分为一个连通集合
    for (int j = 1; j <= g_nodes; ++j) {
        if (!visit[j] && graph[node][j])
            // 注意这里是深度优先遍历,不是直接visit[j]=true,要找到全部直接或间接连连通的
            dfs(j);
    }
}

int main() {

    int edges, k;
    cin >> g_nodes >> edges >> k;
    int s, e;
    while (edges-- > 0) {
        cin >> s >> e;
        // 无向图
        graph[s][e] = graph[e][s] = true;
    }
    // k种假设
    int lost;
    while (k-- > 0) {
        cin >> lost;
        // 重新初始化viste数组
        fill(visit, visit + g_nodes + 1, false);
        // 统计连通分量有几个
        int cnt = 0;
        // 沦陷的城市单独作为一个集合
        visit[lost] = true;
        // 统计剩下的连通分量有几个
        for (int j = 1; j <= g_nodes; ++j) {
            // 它所在的连通分量还未被划分并统计
            if (!visit[j]) {
                dfs(j);
                // 每一次dfs都会划分出一个连通分量
                cnt++;
            }
        }
        // n集合,需要n-1个边
        cout << cnt - 1 << endl;
    }
    return 0;
}
PAT甲级 1013 Battle Over Cities It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways from/toward that city are closed. We must know immediately if we need to repair any other highways to keep the rest of the c 阅读详情

相关推荐

MTK平台高效部署Qwen2.5大模型:从转换到推理全流程解析

本文详细解析了在联发科(MTK)NeuroPilot平台上高效部署Qwen2.5大模型的全流程。内容涵盖从环境搭建、模型转换、量化优化到编译部署与上机推理的完整步骤,重点分享了模型转换与模型运行的关键实践与避坑指南,旨在帮助开发者将大语言模型成功集成至移动及边缘设备。

zeta9的博客 378

leetcode310.最小高度树

题目大意 对于一个具有树特征的无向图,我们可选择任何一个节点作为根。图因此可以成为树,在所有可能的树中,具有最小高度的树被称为最小高度树。给出这样的一个图,写出一个函数找到所有的最小高度树并返回他们的根节点。 格式 该图包含 n 个节点,标记为 0 到 n - 1。给定数字 n 和一个无向边 edges 列表(每一个边都是一对标签)。 你可以假设没有重复的边会出现在 edges 中。由于所有的边都是无向边, [0, 1]和 [1, 0] 是相同的,因此不会同时出现在 edges 里。 示例 1: 输入: n

大腿壮的博客 282

【LTspice】005 伯德图绘制

目录 1 伯德图介绍 2 LTspice 截止频率验证 3 LTspice中如何添加光标 4 LTspice中如何将 幅频 和 相频曲线分开 1 伯德图介绍 Bode图由对数幅频特性和对数相频特性两张图组成。伯德图_百度百科 (1)对数幅频特性曲线 对数幅频特性是频率特性的对数值L(ω)=20lgA (ω)(dB)与频率ω的关系曲线;对数幅频特性的纵轴采用线性分度,为幅值的分贝数,即 L(ω)=20lgA(ω),A(ω)每增加10倍,L(ω)增加20dB;横坐标采用对数分度,即横轴上的ω取

m0_59642765的博客 1万+

树与二叉树——从零起步的数据结构学习日志3

介绍了二叉树的基本概念和重要特性。

GeekBoy's Blog 499

NVIDIA Jetson Xavier NX刷机教程

NVIDIA Jetson Xavier NX刷机教程,分别安装OS和SDK的经验分享

qq_68271367的博客 6958

ESP32驱动GC9A01圆形屏实战:Arduino平台LVGL移植与图像显示优化

本文详细介绍了在Arduino平台上使用ESP32驱动GC9A01圆形屏的实战指南,包括硬件连接、LVGL移植与图像显示优化。通过SPI配置、LVGL库安装和双缓冲机制等技巧,帮助开发者快速实现高效显示效果,适用于智能家居控制面板等应用场景。

weixin_29182481的博客 736

基于ID3、C4.5算法的决策树相关知识

文章目录基础概念熵条件熵信息增益信息增益比决策树生成ID3生成算法决策树剪枝C4.5生成算法 基础概念 熵 离散型变量X的概率分布是P(X)。它的熵H(X)  or  H(P){H(X) \; or \; H(P)}H(X)orH(P)越大,代表越均匀、越混乱、越不确定。熵的公式如下: H(P)=−∑x∈XP(x)log⁡P(x) {H(P)} = {- \sum_{x \in X}P(x) \log P(x)} H(P)=−x∈X∑​P(x)logP(x) 定义0log⁡0=00\log0=00log

VariableX的博客 459

如何使用windows搭建一个公网ftp/sftp服务器

在有公网ip的情况下,使用windows系统搭建一个ftp/sftp服务器会带来很多的方便,可以实现远程移动端的一键式访问,对于文件的备份、多设备的共享都十分的方便。然而网上许多的教程都是基于windows自带的iis搭建一个局域网ftp服务器,然而在搭建好后,我想要通过端口映射的方式实现在外网访问时,却发现连接不上的问题,感觉可能是因为windows家庭版的原因导致的。因此在查阅很多资料之后终于找到了一个公网ftp/sftp服务器的搭建方式,实测可用。这里把流程记录一下,做一个备忘录,也方便大家搭建。

weixin_43354138的博客 1万+

sklearn(2)—— 决策树

1 概述 1.1 决策树是如何工作的 决策树(Decision Tree)是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规则,并用树状图的结构来呈现这些规则,以解决分类和回归问题。决策树算法容易理解,适用各种数据,在解决各种问题时都有良好表现,尤其是以树模型为核心的各种集成算法,在各个行业和领域都有广泛的应用。 我们来简单了解一下决策树是如何工作的。决策树算法的本质是一种图结构,我们只需要问一系列问题就可以对数据进行分类了。比如说,来看看下面这组数据集,这是一系列已知物种以及所属

帆_5021的博客 1216

机器学习笔记 - 神经辐射场(NeRF)的简要概述

神经辐射场十分重要。在表示和渲染 3D 场景领域,神经辐射场 (NeRF) 在准确性方面取得了巨大突破。给定底层场景的多个图像,NeRF 可以从任意视点重建该场景的高分辨率、2D 渲染图。与局部光场融合 (LLFF) 和场景表示网络 (SRN) 等现有技术相比,NeRF 更能够捕获场景外观和几何形状的复杂组成部分(例如,依赖于视图的反射和复杂的材料)。NeRF的研究目的是合成同一场景不同视角下的图像。

学以致用 知行合一 1693

微信浏览器input[file]拍照点确认后强刷新解决

微信浏览器input强刷新,input h5强刷新,微信浏览器上传图片后刷新,h5表单强刷新,h5调用拍照后返回首页,h5调用拍照后刷新,微信浏览器强制刷新,iOS上微信浏览器input强刷新,iOS上微信浏览器上传图片后强刷新,ios微信浏览器上传图片后页面刷数据,h5在ios浏览器闪频,h5在ios微信打开时强制刷新,ios手机上调用相机后页面刷新,ios手机上调用相机后页面后重置,ios拍照后刷新,ios拍照完页面大刷新

江拥羡橙的博客 1350

图论算法—最小生成树的Prim算法和Kruskal算法原理解析以及Java代码的实现

介绍了图的最小生成树的概念以及求最小生成树的两种算法:Prim算法和Kruskal算法的原理,最后提供了基于邻接矩阵和邻接链表的图对两种算法的Java实现。

终生学习践行者 7832

PX4从放弃到精通(五):PX4中的姿态表示方法及转换关系

文章目录机体坐标系与地理坐标系一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 机体坐标系与地理坐标系 在实际应用中,加速度计的测量轴是由运动平台安装固定此器件的轴向决定的。这些坐标轴就形成了载体坐标系,定义如下: 坐标原点设在载体质心(这样可简化运动方程的推导); y轴指向载体前方,称为横滚轴,横滚角以y轴为起始旋转轴而得到,符合右手定则; x轴与y轴夹角90°,指向载体横向,称为俯仰轴,俯仰角以x轴为起始旋转轴而得到,符合右手定则; z轴与x轴、y轴构成右手笛卡儿坐标系,指向载体垂直方向

超维空间科技的博客 8113

PAT A1013 Battle Over Cities (25分)【图的DFS+连通分量】

文章目录题目描述知识点实现码前思考代码实现码后反思 题目描述 知识点 图的遍历 实现 码前思考 图的dfs,求连通分量哒~ 记得每次都要初始化vis数组全体为false哈 代码实现 //图的DFS,计数连通分量 //数组下标从1开始 #include <cstdio> #include <algorithm> using namespace std; const int maxn = 1e3+10; int n; int m; int k; int blocked; b.

yc_cy1999的博客 256

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C++ Pat甲级1013 Battle Over Cities (25 分)(求图的连通分量dfs)

1013Battle Over Cities(25 分) It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways from/toward that city are closed. We...

Scarlett 238

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

PAT (Advanced Level) Practice 1013 Battle Over Cities(25分)【图的遍历、连通分量、深度优先搜索、并查集】

知识点: 图的遍历、连通分量、深度优先搜索、并查集 题意 给出一个图,删掉一个点,计算至少需要添加几条边才能使整个图保持连通。 思路 最少需要添加的边就是这个图的连通分量的个数-1。可以通过并查集或者DFS的方式来计算连通分量的个数。 代码 DFS #include <cstdio> #include <vector> #include <algorithm> ...

一只小羊 149

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

PAT (Advanced Level) Practice 1013 Battle Over Cities (25分) (使用DFS对图的强连通分量的统计)

1.题目 It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways from/toward that city are closed. We must know immediately if ...

且慢 182

PAT 甲级 1013 Battle Over Cities

PAT 甲级 1013 Battle Over Cities It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways from/toward that city are closed. We must know immediately if we need to repair any other hig

Jasonare的博客 414

PAT甲级1013 Battle Over Cities (25 分)题解

\quad这个题目在于求图连通分量个数,我们从任一顶点开始对图进行dfs并记录哪些点被访问,在没有被访问过的点中继续选出任一顶点开始dfs,知道所有点都被访问,进行dfs的次数即为图连通分量个数。题目难点在于在某个点被去除的时候如何进行dfs,很简单,若dfs遍历到需要被去除的那个点我们就直接return掉,表示这条路走不通即可。 #include <iostream> #inclu...

qq_40438165的博客 1824

PAT-ADVANCED1013——Battle Over Cities

我的PAT-ADVANCED代码仓:https://github.com/617076674/PAT-ADVANCED 原题链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805500414115840 题目描述: 题目翻译: 1013 城市之间的战争 在战争中,所有的城市都通过高速公路连接在一起,这一...

清风阁 1822

PAT_甲级_1013 Battle Over Cities (25分) (C++)【DFS+连通分量】

目录 1,题目描述 题目大意 输入 输出 注意 2,思路 连通分量 定义 求法 核心思想 3,代码 1,题目描述 Sample Input: 3 2 3 1 2 1 3 1 2 3 Sample Output: 1 0 0 题目大意 举个例子吧(题目给出的): 假设有3个城市c1,c2,c3,两座桥b1,b2。若b1连接c1和c2,b2连接c1...

&再见萤火虫&的博客 305

pat顶级1001 Battle Over Cities - Hard Version (35 point(s))

欢迎访问我的pat顶级题解目录哦https://blog.youkuaiyun.com/richenyunqi/article/details/86751676 题目描述 算法笔记 本题是pat甲级1013. Battle Over Cities (25)的升级版,我在博客pat甲级1013. Battle Over Cities (25)题解中阐述了解决甲级1013题的两种方法:并查集和DFS搜索。本题中...

日沉云起的博客 1941

【PAT】1013. Battle Over Cities (25)

题目链接:http://pat.zju.edu.cn/contests/pat-a-practise/1013 题目描述: It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways

此去经年 3848

1013. Battle Over Cities (25)-PAT甲级真题(图的遍历,统计强连通分量的个数,dfs)

1013. Battle Over Cities (25) It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways from/toward that city are closed. We

柳婼 の blog 3028
上一篇: PAT 1021 Deepest Root (25分) 从测试点3超时到满分再到代码优化
下一篇: PAT 1022 Digital Library (30分)从踩坑到满分
wwang_dev
博客等级 码龄7年 27粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值