vijos 无向图最短路径 思维
来源:互联网 发布:雷克萨斯rx200t 知乎 编辑:程序博客网 时间:2024/06/06 18:00
无向图最短路径问题,是图论中最经典也是最基础的问题之一。本题我们考虑一个有 n 个结点的无向图 G。
G 是简单完全图,也就是说 G 中没有自环,也没有重边,但任意两个不同的结点之间都有一条带权的双向边。
每一条边的边权是非负实数,但我们并不知道每一条边的具体边权。
好消息是我们知道 G中任意两点最短路径的长度d(i,j)。且保证至少有一种边权的分配方案满足得到的带权图中ii与jj的最短路长度恰好是d(i,j)。
下面是留给你的任务:对于任意一对点(i,j),希望你能找出来所有合法的边权分配方案中ii和jj之间边权的最大值。
思路:
考虑n个点的无向图任意两点之间什么情况下边权是一定的,那么肯定就是当不存在第三个点k 使得 d(i,j) = = d(i,k)+d(k,j),那么i,j之间最大值只能为 d(i,j) ,否则如果存在第三点满足上述条件那么i,j之间路径不定.
#include<bits/stdc++.h>using namespace std;const int maxn = 1e2+5;const int inf = 0x3f3f3f3f;int book[maxn][maxn],mp[maxn][maxn];int main(){ int _,n; cin>>_; while(_--) { memset(mp,0,sizeof mp); scanf("%d",&n); for(int i = 1;i <= n;++i) { for(int j = 1;j <= n;++j) { scanf("%d",&book[i][j]); } } for(int k = 1;k <=n ;++k) { for(int i = 1;i <= n;++i) { if(i == k) continue; for(int j = 1;j <= n;++j) { if(i == j || k == j) continue; if(book[i][j] == book[i][k] + book[k][j]) { mp[i][j] = 1; } } } } for(int i = 1;i <= n;++i) { for(int j = 1;j <= n;++j) { if(i == j) { printf("0 "); continue; } if(mp[i][j] == 1) printf("infty"); else printf("%d",book[i][j]); printf(" "); } puts(""); } } return 0;}
阅读全文
0 0
- vijos 无向图最短路径 思维
- 2017-10-7 vijos 无向图最短路径
- [Vijos 2024]无向图最短路径 (最短路)
- 无向图最短路径问题
- Dijkstra无向图最短路径
- 无向图最短路径算法(C#)实现
- 无向图最短路径dijkstra算法
- 无向图最短路径的数目
- SGU101 无向图欧拉路径
- 基于连接矩阵的无向图最短路径Dijkstra算法
- 【九度OJ】1008【加权无向图最短路径】
- 拓扑排序+最短路径(无环加权有向图最短路径算法)
- 单源最短路径算法(有向无回路)
- 无向图的最小路径覆盖
- 单源最短路径算法(有向无回路) .
- 欧拉路径(无向图)
- codeforces 508D (无向图欧拉路径)
- 有向图最短路径
- 利用reduce端的GroupingComparator来实现将一组bean看成相同的key
- codevs 1961 躲避大龙 bfs
- JADE学习笔记2 :Agent的创建和运行
- 双向链表基本操作
- servlet
- vijos 无向图最短路径 思维
- BZOJ 1485 [HNOI2009]有趣的数列
- Mongo查询操作
- 求解最大子数组问题
- 网易2017秋招编程题集合
- Codeforces Round #437
- tcp rto
- 字母排序
- JAVA多线程和并发基础面试问答