题目链接:

https://vjudge.net/problem/POJ-3268

题目大意:

有编号为1-N的牛,它们之间存在一些单向的路径。给定一头牛的编号X,其他牛要去拜访它并且拜访完之后要返回自己原来的位置,求所有牛从开始到回家的时间是多少?

思路:

所有牛都回到了家所花费的时间就是这些牛中花费时间的最大者,可以正向的Dijkstra求出从X到每个点的最短时间,然后一个骚操作:将所有边反向(swap(Map[i][j], Map[j][i])),再从x用dijkstra求出X到每个点的最短时间,第二次求出来的时间通过逆向求出来的是每个点到X的最短时间,两个一加,取最大者就是答案。

本题也可以用Bellman来求,不过由于边比较多,必须用队列优化的SPFA来求,但是SPA需要邻接表,不能像邻接矩阵那样直接反向,所以存图的时候存两张图,一张正向,一张反向,跑俩遍出结果。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<sstream>
using namespace std;
typedef long long ll;
const int maxn = + ;
const int INF = 1e9 + ;
int T, n, m, cases;
int Map[maxn][maxn];
int d1[maxn], d2[maxn];
bool v[maxn];
void flip()
{
for(int i = ; i <= n; i++)
{
for(int j = i + ; j <= n; j++)swap(Map[i][j], Map[j][i]);
}
}
void dijkstra(int u, int d[])
{
memset(v, , sizeof(v));
for(int i = ; i <= n; i++)d[i] = INF;
d[u] = ;
for(int i = ; i <= n; i++)
{
int x, m = INF;
for(int i = ; i <= n; i++)if(!v[i] && d[i] <= m)m = d[x = i];//找距离源点最近的点
v[x] = ;
for(int i = ; i <= n; i++)d[i] = min(d[i], d[x] + Map[x][i]);//进行松弛
}
}
int main()
{
int u, x, y, z;
while(cin >> n >> m >> u)
{
for(int i = ; i <= n; i++)
for(int j = ; j <= n; j++)Map[i][j] = (i == j ? : INF);
for(int i = ; i < m; i++)
{
scanf("%d%d%d", &x, &y, &z);
//cout<<"000"<<endl;
Map[x][y] = z;
}
dijkstra(u, d1);
flip();
dijkstra(u, d2);
for(int i = ; i <= n; i++)d1[i] += d2[i];
sort(d1 + , d1 + n + );
cout<<d1[n]<<endl;
}
return ;
}

最新文章

  1. js判断是手机还是电脑访问网站
  2. ubuntu14.04 下emacs 24 配置
  3. centos设置静态IP
  4. Javascript和Java获取各种form表单信息的简单实例
  5. timus 1982 Electrification Plan(最小生成树)
  6. UVALive Proving Equivalences (强连通分量,常规)
  7. Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类
  8. Slithice 分布式架构设计
  9. jQuery 选择器 (一)
  10. 可变数目参数----关键字params的使用
  11. session简介与生命周期
  12. HDFS的Java客户端编写
  13. OkHttp的get和post请求
  14. 构建SSH服务
  15. 高级Linux运维工程师必备技能(扫盲篇)
  16. BIEE11G配置Oracle 12c数据源
  17. docker容器网络通信原理分析
  18. Docker-compose 在up之后,各个子服务容器的hosts文件中不能找到父服务的域名
  19. Logstash 本地安装plugin
  20. Android Studio 3.1.2 Device File Explorer nothing to show

热门文章

  1. bat脚本:Java一键编译(Javac java)
  2. Mycat 读写分离详解
  3. 【Python】 上下文管理器和contextlib
  4. [luogu1168]中位数_优先队列
  5. JS获得一个对象的所有属性和方法
  6. 和sin有关的代码
  7. MySQL之数据的insert-delete-update操作
  8. C语言的第二次作业
  9. 山西某公司NetApp存储不小心删除文件数据恢复成功案例
  10. $(function(){})和window.onload的区别