平面设计类网站有哪些做网站建设公司crm在线的培训服务
平面设计类网站有哪些,做网站建设公司crm在线的培训服务,小型 网站 源码,wordpress列表页怎么写文章目录 炸铁路题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 题意解析思路CODE 炸铁路
题目描述
A 国派出将军 uim#xff0c;对 B 国进行战略性措施#xff0c;以解救涂炭的生灵。
B 国有 n n n 个城市#xff0c;这些城市以铁路相连。任意两个城市都可以通… 文章目录 炸铁路题目描述输入格式输出格式样例 #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 (1≤n≤150 1 ≤ m ≤ 5000 ) 1 \leq m \leq 5000) 1≤m≤5000)分别表示有 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 ab ab表示 ⟨ 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 SPFA 找a, 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 vectorpii vectorpii 进行排序然后输出。 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 pairint, int pii; // 定义一个pair类型用于存储两个整数vectorpii 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; // 起始城市到自身的距离为0queueint 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/pingmian/88528.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!