题意:
n个农场各有一头牛,共n只牛,有m条单向路径(有向图),x号农场为要目的地。
求:每只牛从所在的农场出发到达x农场 并 从x农场返回其所在的农场 的最短路程是多少, 得到n只牛最短路程的最大值。

Input:
第1行:三个空格分隔的整数,分别为:n、m和x
第2行…M+1:第I+1行用三个空格分隔的整数(ai、bi和ti)描述了道路I。所描述的道路从农场ai到农场bi,需要时间单位进行穿越。

Output:
第1行:一个整数:任何一头牛必须行走的最长时间。

思路:

  • 粗暴的想法:先枚举每个农场到x农场的最短时间,再计算x到各个农场的最短时间。第一步的复杂度为O(n^3),会超时,该方法pass!
  • 使用Floyed算法:同上,O(n^3),超时,pass!
  • 更优化的算法:以x为起点,dijkstra(x)求得从x返回各个农场的耗时。前往x农场的耗时的计算,可以使用改变单向路方向的方法,将Map[i][j]与Map[j][i]的值互换,再次dijkstra(x),即可求得前往x农场的最短耗时。
#include<iostream>
#include<string>
#include<cmath>
#include<ctype.h>
#include<memory.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<iomanip>
#include<set>
#include<list>
#include<vector>
#include<stack>
#include<queue>
#define ll long long int
using namespace std;
const int INF = 100000 + 10;
const int maxn = 1010;
int n, m, x;
int Map[maxn][maxn];
int dis[maxn];
int vis[maxn];
int ans[maxn];void dijkstra(int s)
{memset(vis, 0, sizeof(vis));memset(dis, 0, sizeof(dis));for (int i = 1; i <= n; i++)dis[i] = Map[s][i];//必须是s->i,因为传入的参数是起点,且图为有向图vis[s] = 1;for (int i = 1; i <= n; i++){int Min = INF;int min_pos = -1;for (int j = 1; j <= n; j++)if (dis[j] < Min && !vis[j]){Min = dis[j];min_pos = j;}if (min_pos != -1)vis[min_pos] = 1;for (int j = 1; j <= n; j++){if (dis[j] > dis[min_pos] + Map[min_pos][j] && !vis[j])dis[j] = dis[min_pos] + Map[min_pos][j];}}
}
int main()
{cin >> n >> m >> x;for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)Map[i][j] = i == j ? 0 : INF;for (int i = 1; i <= m; i++){int u, v, w;cin >> u >> v >> w;Map[u][v] = w;}dijkstra(x); //求返回途中的耗费(起点是x)for (int i = 1; i <= n; i++)ans[i] += dis[i];for (int i = 1; i <= n; i++)//将单向路转向for (int j = i + 1; j <= n; j++)swap(Map[i][j], Map[j][i]);dijkstra(x); //转置后,以x为起点,求到x的耗费for (int i = 1; i <= n; i++)ans[i] += dis[i];int ANS = 0;for (int i = 1; i <= n; i++)ANS = max(ANS, ans[i]);cout << ANS << endl;return 0;
}

poj 3268 SliverrCowParty Dijkstra最短路(单向路转向)相关推荐

  1. Silver Cow Party POJ - 3268(dijkstra+反向交换)

    题意: 求X到某点来回路程的最短路的最大值. 模板更新中... 题目 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered ...

  2. POJ 3268 (dijkstra算法)

    Silver Cow Party Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N  ...

  3. poj 3268 bzoj 1631: [Usaco2007 Feb]Cow Party(最短路)

    1631: [Usaco2007 Feb]Cow Party Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 855  Solved: 613 [Subm ...

  4. 算法提高课-图论-单源最短路的建图方式-AcWing 1126. 最小花费:dijkstra求最长路

    题目分析 来源:acwing 分析: 链条转移:start * (1-w1) * (1- w2) * (1- w3) -(1-wn) = 100,要start最小,则w =(1-w1) * (1- w ...

  5. Silver Cow Party (POJ - 3268 )

    Silver Cow Party (POJ - 3268 ) 这道题是我做的最短路专题里的一道题,但我还没做这个,结果比赛就出了,真是.......... 题目: One cow from each ...

  6. D - Silver Cow Party POJ - 3268

    D - Silver Cow Party POJ - 3268 dijkstra 是 O(n2),堆优化一下, O(nlogn) 对每个点跑一次 dj, 取 max(dis(x->i)+dis( ...

  7. POJ 3268 Silver Cow Party (最短路径)

    POJ 3268 Silver Cow Party (最短路径) Description One cow from each of N farms (1 ≤ N ≤ 1000) convenientl ...

  8. 坐在马桶上看算法:Dijkstra最短路算法

                                                             [坐在马桶上看算法]算法7:Dijkstra最短路算法 上周我们介绍了神奇的只有五行的 ...

  9. 迪克斯特拉算法(Dijkstra 最短路算法)(简单易懂)

    Dijkstra 最短路算法 上周我们介绍了神奇的只有五行的 Floyd 最短路算法,它可以方便的求得任意两点的最短路径,这称为"多源最短路".本周来来介绍指定一个点(源点)到其余 ...

最新文章

  1. Confluence 6 从你的 JDBC 连接中直接启用校验查询
  2. php多维数组打印出最长的数组,将php中的多维数组打印到html表中
  3. 网络001 交换机基本配置
  4. 9soc sensor与bayer sensor 区别,内外置isp
  5. Boost:info hook信息挂钩的测试程序
  6. 再见,Postman...
  7. redis分布式缓存(三)
  8. 如何接触到最新的前端动态、最前沿的前端技术
  9. Standard C Episode 1
  10. 如此沙雕的代码注释,还是程序员会玩!
  11. GDB调试时的参数设置
  12. 画直线的算法之DDA算法+代码实现(法一)
  13. 小学语文历史重点名人以及解析大全
  14. Weclome to Thm-V九维空间
  15. ERA5气象数据 :数据中相对湿度、边界层高度、温度、风向、地面气压等参数下载详细教程
  16. Angel-Eye: A Complete Design Flow for Mapping CNN onto Embedded FPGA阅读笔记
  17. 《全球互联网金融商业模式:格局与发展》——第3章,第2节互联网保险经纪/代理公司...
  18. php图片写入带问号_关于编码:PHP输出显示带有问号的黑色小菱形
  19. nodejs+Vue+Elementui的校园二手旧书交易交换平台sequelize
  20. 插画版 Kubernetes 指南

热门文章

  1. 回炉重造-数据结构之数组列表
  2. php使用curl实现get和post请求的方法,数据传输urldecode和json
  3. Face++的技术面经历
  4. calc BZOJ 2655
  5. java多线程synchronized底层实现
  6. js添加事件、移除事件、阻止冒泡、阻止浏览器默认行为等写法(兼容IE/FF/CHROME) 转载...
  7. 同时安装sql server和oracle导致系统启动变慢的解决方案
  8. 服务器内文件如何修改后缀名,修改服务器配置 让asp.net文件后缀名随心所欲
  9. XM7 FOR ANDROID,如何使用Android Studio开发Gradle插件
  10. CCF202009-2 风险人群筛查