洛谷 P1656 炸铁路 - SPFA

文章目录

  • 炸铁路
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
  • 题意解析
  • 思路
  • CODE



炸铁路

题目描述

A 国派出将军 uim,对 B 国进行战略性措施,以解救涂炭的生灵。

B 国有 n n n 个城市,这些城市以铁路相连。任意两个城市都可以通过铁路直接或者间接到达。

uim 发现有些铁路被毁坏之后,某两个城市无法互相通过铁路到达。这样的铁路就被称为 key road。

uim 为了尽快使该国的物流系统瘫痪,希望炸毁铁路,以达到存在某两个城市无法互相通过铁路到达的效果。

然而,只有一发炮弹(A 国国会不给钱了)。所以,他能轰炸哪一条铁路呢?

输入格式

第一行 n , m ( 1 ≤ n ≤ 150 n,m\ (1 \leq n\leq 150 n,m (1n150 1 ≤ m ≤ 5000 ) 1 \leq m \leq 5000) 1m5000),分别表示有 n n n 个城市,总共 m m m 条铁路。

以下 m m m 行,每行两个整数 a , b a, b a,b,表示城市 a a a 和城市 b b b 之间有铁路直接连接。

输出格式

输出有若干行。

每行包含两个数字 a , b a,b a,b,其中 a < b a<b a<b,表示 ⟨ a , b ⟩ \lang a,b\rang a,b 是 key road。

请注意:输出时,所有的数对 ⟨ a , b ⟩ \lang a,b\rang a,b 必须按照 a a a 从小到大排序输出;如果 a a a 相同,则根据 b b b 从小到大排序。

样例 #1

样例输入 #1

6 6
1 2
2 3
2 4
3 5
4 5
5 6

样例输出 #1

1 2
5 6


题意解析

  • 本题可抽象成以下意思:以某一点为源点a,删掉跟它连接的b点之间的路,如果这俩不能连通了,就算是答案。
  • 而不连通,这个似乎可以用并查集做,但是我在这用的是 S P F A SPFA SPFAa, b间的最短路,如果不存在了,说明不连通了。

思路

  • 初始化图,读入每一条边。
  • 两层循环枚举每个点,a始终比b小,如果两点之间有路那么就进行删路寻最短路。
    • 如果还是有最短路,那么这条边不是我们要找的;
    • 如果没有最短路了,那么这条边就是我们要找的,将其压入 v e c t o r vector vector 内。
  • 由于要从小到大排序输出,我们使用 s o r t ( ) sort() sort() 函数对 v e c t o r < p i i > vector<pii> vector<pii> 进行排序,然后输出。
    • s o r t ( ) sort() sort() 函数:有第三个参数,是一个比较器,用于决定排序的顺序, s o r t ( ) sort() sort() 函数本身从小到大排序。
      • 比较器返回一个 b o o l bool bool 类型的变量,用于表示排序时,第一个元素是否应该在第二个元素之前。
      bool compare(int a, int b) {return a > b; // 按照降序排序
      }
      

CODE

#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
#include <queue>
#define ll long long
#define INF 0x3f3f3f3f using namespace std;typedef pair<int, int> pii; // 定义一个pair类型,用于存储两个整数vector<pii> path; // 存储所有的关键路
const int N = 160, M = 5010;
int n, m; // n是城市的数量,m是铁路的数量
int g[N][N], st[N]; // g是邻接矩阵,st用于标记城市是否已经被访问
int dist[N]; // dist[i]表示从起始城市到城市i的最短距离// 判断移除城市a和城市b之间的铁路后,是否还存在一条从城市a到城市b的路径
bool spfa(int a, int b){memset(dist, INF, sizeof dist); // 初始化所有城市的距离为无穷大dist[a] = 0; // 起始城市到自身的距离为0queue<int> q;q.push(a); // 将起始城市添加到队列中st[a] = true; // 标记起始城市已经被访问while(q.size()){auto t = q.front(); // 取出队列中的第一个城市q.pop();st[t] = false; // 标记该城市已经被访问for(int i = 1; i <= n; ++i){// 如果当前正在处理的是城市a和城市b之间的铁路,则跳过if(i == b && t == a) continue; // 如果找到了一条到达城市i的更短的路径,则更新dist[i]if(dist[i] > dist[t] + g[t][i]){dist[i] = dist[t] + g[t][i];// 如果城市i还没有被访问过,则将其添加到队列中if(!st[i]){q.push(i);st[i] = true;}}}}// 如果城市b无法到达,则返回true,否则返回falseif(dist[b] == INF) return true;else return false;
}int main(){cin >> n >> m; // 读取城市和铁路的数量memset(g, INF, sizeof g); // 初始化邻接矩阵while(m--){int a, b;scanf("%d%d", &a, &b); // 读取一条铁路的信息g[a][b] = g[b][a] = 1; // 更新邻接矩阵}// 对每一对城市进行检查,如果它们之间的铁路是关键路,则将其添加到path中for(int i = 1; i <= n; ++i)for(int j = i + 1; j <= n; ++j)if(g[i][j] != INF && spfa(i, j)){path.push_back({i, j});}sort(path.begin(), path.end()); // 对path进行排序// 输出所有的关键路for(int i = 0; i < path.size(); ++i){auto t = path[i];cout << t.first << ' ' << t.second << endl;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/194151.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

矢量图形设计软件CorelDRAW 2023 mac界面说明

CorelDRAW 2023 mac是一款专业的矢量图形设计软件&#xff0c;由Corel公司开发。它提供了广泛的创意工具和功能&#xff0c;旨在满足设计师、艺术家和创意专业人士的需求。 CorelDRAW 2023具有直观的用户界面和工作流程&#xff0c;使用户能够轻松创建各种类型的图形设计&#…

XSS漏洞原理

XSS漏洞介绍&#xff1a; 跨站脚本攻击XSS(Cross Site Scripting)&#xff0c;为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆&#xff0c;故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码&#xff0c;当用户浏览该页面时&#xff0c;嵌入We…

C语言第四十二弹---使用多种方法实现字符串左旋转

使用多种方法实现字符串左旋转 一、 左移法 思路&#xff1a;每一次通过移动第一个字符&#xff0c;然后把后面的字符前移&#xff0c;然后再进行移动第一个字符再前移。故需要使用嵌套循环&#xff0c;外层循环控制移动第一个字符的次数&#xff0c;第二个循环进行字符前移 …

基于Java SSM框架+Vue实现企业公寓后勤管理系统项目【项目源码+论文说明】

基于java的SSM框架Vue实现企业宿舍后勤管理网站演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所…

汽车电子芯片介绍之Aurix TC系列

Infineon的AURIX TC系列芯片是专为汽车电子系统设计的&#xff0c;采用了32位TriCore处理器架构。该系列芯片具有高性能、低功耗和丰富的外设接口&#xff0c;适用于广泛的汽车电子应用。以下是AURIX TC系列芯片的主要特性&#xff1a; 1. 高性能处理器 AURIX TC芯片采用了高…

【Linux】进程控制-进程终止

目录 一、进程终止&#xff0c;OS做了什么&#xff1f; 二、进程终止的常见方式 1、代码跑完&#xff0c;结果正确 2、代码跑完&#xff0c;结果不正确 补充 (1)、main函数的返回值的意义是什么&#xff1f; (2)、return 0的含义是什么&#xff1f; (3)、退出码是什么和…

基于OpenCV和改进深度学习网络的香菇分级图像分割系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 近年来&#xff0c;随着计算机视觉和深度学习的快速发展&#xff0c;图像分割技术在各个领域中得到了广泛应用。图像分割是将图像划分为不同的区域或对象的过程&…

Visual Studio 2022+Python3.11实现C++调用python接口

大家好&#xff01;我是编码小哥&#xff0c;欢迎关注&#xff0c;持续分享更多实用的编程经验和开发技巧&#xff0c;共同进步。 查了一些资料&#xff0c;不是报这个错&#xff0c;就是报哪个错&#xff0c;没有找到和我安装的环境的一致的案例&#xff0c;于是将自己的摸索分…

SQL错题集1

1.找出选修课程成绩最差的选课记录 注&#xff1a; 聚合函数只能用在group by和&#xff08;&#xff09;括号中 找最值可用排序order bylimit 1 2. 查询选修成绩 合格的课程 超过2门的 学生编号 3.删除姓名为"LiMing"的学生信息 注&#xff1a; 删除一整行信息&…

Google Guava 集合工具使用详解

文章目录 集合集合分类- MultisetHashMultisetTreeMultisetLinkedHashMultisetConcurrentHashMultisetEnumMultisetImmutableMultiset - MultimapArrayListMultimapHashMultimapLinkedListMultimapLinkedHashMultimapTreeMultimapImmutableListMultimapImmutableSetMultimap - …

CnosDB有主复制演进历程

分布式存储系统的复杂性涉及数据容灾备份、一致性、高并发请求和大容量存储等问题。本文结合CnosDB在分布式环境下的演化历程&#xff0c;分享如何将分布式理论应用于实际生产&#xff0c;以及不同实现方式的优缺点和应用场景。 分布式系统架构模式 分布式存储系统下按照数据复…

Android Audio实战——音频属性设置(二十二)

在 Android 中,使用音频属性(AudioAttributes)可以控制音频的行为。AudioAttributes 已经定义了一些常见的属性,比如音频用途、音频内容类型、音频标志等。 一、音频属性简介 1、常见属性 音量(volume):使用 setParameters("volume=5") 将音量设置为 5(范围…

java消息中间件简介

一、为什么要使用消息中间件 消息中间件就是可以省去繁琐的步骤&#xff0c;直达目的&#xff0c;怎么讲呢&#xff0c;就是比如你想很多人&#xff0c;知道你的动态&#xff0c;而知道的人可能手机没电&#xff0c;可能手机信号不好&#xff0c;可能手机不在服务区&#xff0c…

智能优化算法应用:基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.狮群算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

Maven的安装与配置本地仓库,镜像源,环境变量详细步骤

参考视频&#xff1a; 黑马程序员2023新版JavaWeb开发教程&#xff0c;实现javaweb企业开发全流程 【小飞非系列】最新Maven实战教程-项目实战构建利器 文章目录 一.下载Maven安装包二.配置Maven的本地仓库(本机仓库)三.配置镜像源&#xff08;加速jar包的下载)四.配置Maven的环…

Zookeeper 安装与部署

Zookeeper官网 目录 1 配置文件参数解读2 Zookeeper 单点安装3 Zookeeper 分布式安装 1 配置文件参数解读 Zookeeper 中的配置文件 zoo.cfg 中参数含义解读如下&#xff1a; &#xff08;1&#xff09;tickTime 2000&#xff1a;通信心跳数&#xff0c;Zookeeper 服务器与客户…

IdleStateHandler 心跳机制源码详解

优质博文&#xff1a;IT-BLOG-CN 一、心跳机制 Netty支持心跳机制&#xff0c;可以检测远程服务端是否存活或者活跃。心跳是在TCP长连接中&#xff0c;客户端和服务端定时向对方发送数据包通知对方自己还在线&#xff0c;保证连接的有效性的一种机制。在服务器和客户端之间一…

再谈项目管理中的效率问题

一、把事情做对。 敏捷的核心理念追求的就是把事情做对&#xff0c;这样的效率是最高的。中国古代就有南辕北辙的故事&#xff0c;方向错了再怎么努力都是白搭。那什么才是对的事情&#xff1f;这里分成了两派&#xff1a;1、瀑布方式认为一开始提的合同、需求就是对的事情&am…

嵌入式常用滤波算法

在嵌入式系统中&#xff0c;信号处理是一个关键的方面&#xff0c;特别是在处理来自各种传感器的数据时。滤波算法在这方面发挥着重要作用&#xff0c;用于去除噪声、平滑数据或提取有用的信号。以下是一些在嵌入式系统中常用的滤波算法&#xff1a; 1 低通滤波器&#xff08;…

bean依赖属性配置

bean依赖属性配置 文章目录 bean依赖属性配置 Data ConfigurationProperties(prefix "cartoon") public class CartoonProperties {private Cat cat;private Mouse mouse; }cartoon:cat:name: whatage: 5mouse:name: howage: 6这样的话&#xff0c;业务bean无需在读…