当前位置: 首页 > news >正文

【PAT甲级题解记录】1013 Battle Over Cities (25 分)

【PAT甲级题解记录】1013 Battle Over Cities (25 分)

前言

Problem:1013 Battle Over Cities (25 分)

Tags:DFS 连通图

Difficulty:剧情模式 想流点汗 想流点血 死而无憾

Address:1013 Battle Over Cities (25 分)

问题描述

给出一个城市和公路的连通图(虽然题目里没有明确说明),城市编号1-N。

每一次询问都独立输入一个城市编号,求删去这个城市后需要至少加几条路使得连通图成立。

解题思路

其实就是求连通分量数量,想了想试了试没有想到很巧妙的方法,那还是用搜索稳一点:以每个城市为起点开一个dfs,如果被搜索过就直接跳过,最后开了几个dfs就是几个连通分量。

  1. 首先维护一个访问集合inMap,保存访问到的城市,
  2. 当失去一个城市后,以每个未被访问过的城市为起点进行dfs,将dfs到的城市归入集合inMap。(所以之后再遍历到该城市就不会再dfs了)
  3. 当我们开始一系列的dfs时对ans累加1(说明这是一个被隔开的城市),ans最终的值说明了有多少个连通分量,ans-1就是要修的公路数量(N个连通分量只需要N-1条路径来实现整张图的连通)

参考代码

#include<iostream>
#include<vector>
#include<set>using namespace std;
int N, M, K;
vector<vector<int>> edges; 
set<int> inMap; // 用于确认某个城市是否已被搜索
int occupied_city;void init() {cin >> N >> M >> K;edges.resize(N + 1);for (int i = 0; i < M; i++) {int city1, city2;cin >> city1 >> city2;edges[city1].push_back(city2);edges[city2].push_back(city1);}
}void dfs(int root) {inMap.insert(root);int num = edges[root].size();for (int i = 0; i < num; i++) {int next_city = edges[root][i];if (inMap.count(next_city) == 0) {dfs(edges[root][i]);}}
}void solve() {inMap.clear(); // 每次查询都需清空集合int ans = 0; // 连通分量数量cin >> occupied_city;inMap.insert(occupied_city);for (int i = 1; i <= N; i++) {if (inMap.count(i) || i == occupied_city) continue;dfs(i);ans++;}cout << ans - 1 << endl;}void solution_1013() {init();for (int i = 0; i < K; i++) {solve();}
}
int main() {solution_1013();return 0;
}

总结

关于图的连通等问题,用DFS解决很常见。

http://www.lryc.cn/news/19706.html

相关文章:

  • CSS-关键帧动画
  • Allegro如何画Photoplot_Outline操作指导
  • ChatGPT对于普通人有什么机会和影响?
  • 【人工智能 AI】可以从 RPA 中受益的 10 个行业 10 Industries That Can Benefit From RPA
  • PHP 程序如何实现加密解密?
  • 使用IDEA社区版如何创建SpringBoot项目?
  • HTML、CSS学习笔记3(平面转换:位移、旋转、缩放,渐变)
  • 【C语言经典例题】打印菱形
  • easyExcel与poi版本不兼容导致的后台报错问题
  • Fiddler报文分析-断点应用、模拟网络限速-HTTPS的 拦截
  • PHP基础(3)
  • 跳槽进字节跳动了,面试真的很简单
  • 【SpringBoot9】HandlerInterceptor拦截器的使用 ——防重复提交
  • 内网渗透(五十八)之域控安全和跨域攻击-约束性委派攻击
  • Linux僵尸进程理解作业详解
  • 每日一题——L1-078 吉老师的回归(15)
  • ESP32设备驱动-DS1264数字温度传感器驱动
  • 8000+字,就说一个字Volatile
  • MySQL的函数
  • python排序算法
  • 【C++入门第二期】引用 和 内联函数 的使用方法及注意事项
  • 数据结构——顺序表讲解
  • Redis 主从复制-服务器搭建【薪火相传/哨兵模式】
  • 数据库|(五)分组查询
  • Orin安装ssh、vnc教程
  • Allegro如何快速删除孤立铜皮操作指导
  • 从单管单色到单管RGB,这项MicroLED工艺不可忽视
  • 6-Java中新建一个文件、目录、路径
  • Bootstrap系列之Flex布局
  • 匈牙利算法与KM算法的区别