题目:http://poj.org/problem?id=3268

题解:使用 priority_queue队列对dijkstra算法进行优化

#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <functional>
#include <cstring>
using namespace std; const int MAX_V = + ;
const int INF = ; struct edge
{
int to, cost;
edge() {}
edge(int to, int cost) : to(to), cost(cost) {}
};
typedef pair<int, int> P; //first 最短路径, second顶点编号
vector<edge> G[MAX_V]; //图
int d[MAX_V][MAX_V]; //最短距离
int V, E, X; //V顶点数,E是边数 //求解从顶点s出发到所有点的最短距离
void dijkstra(int s)
{
//升序
priority_queue<P, vector<P>, greater<P> > que;
memset(d[s], 0x3f, MAX_V * sizeof(int));
d[s][s] = ;
que.push(P(, s)); //最短路径,顶点编号 while (!que.empty())
{
//每次出队最小的
P p = que.top(); que.pop();
int v = p.second; //编号 if (d[s][v] < p.first) continue; for (unsigned i = ; i < G[v].size(); ++i)
{
edge e = G[v][i]; //与v临边的顶点
// d[s][e.to]经过 v 再经过其他的临边
if (d[s][e.to] > d[s][v] + e.cost)
{
d[s][e.to] = d[s][v] + e.cost;
que.push(P(d[s][e.to], e.to));
}
}
}
} void solve()
{
cin >> V >> E >> X;
--X;
int s, t, ct;
while (E--)
{
cin >> s >> t >> ct;
--s; --t;
G[s].push_back(edge(t, ct));
} for (int i = ; i < V; i++) {
dijkstra(i);
} int ans = ;
for (int i = ; i < V; ++i) {
if (i == X) continue; ans = max(ans, d[i][X] + d[X][i]);
} printf("%d\n", ans);
} int main()
{
solve(); return ; }

最新文章

  1. Git入门资料汇总
  2. 跨域的jsonP
  3. [LeetCode] Palindrome Pairs 回文对
  4. 项目中angular js的接口url统一管理
  5. push or get File or Folder using scp wrapped with expect and bash
  6. Ajax技术使用
  7. 斜堆(二)之 C++的实现
  8. 使用Javascript无限添加QQ好友原理解析
  9. iOS 开发进程与线程
  10. C#&amp;Java重学笔记(集合比较和转换)
  11. 使用haproxy做负载均衡时保持客户端真实的IP
  12. Shell语法中的test命令用法
  13. Codeforces Round #301 (Div. 2) E . Infinite Inversions 树状数组求逆序数
  14. javascript深入理解js闭包(个人理解,大神勿喷)
  15. ELT(数据仓库技术) 学习
  16. Git——如何将本地项目提交至远程仓库
  17. Linux服务器可以进百度,但是进阿里云或者别的一些网站提示‘错误代码:NS_ERROR_NET_INADEQUATE_SECURITY’的问题
  18. mysql8 :客户端连接caching-sha2-password问题
  19. [转帖]TMD为你揭秘中国互联网下半场所有秘密
  20. 【翻译】checkbox的第三种状态

热门文章

  1. 2018软工实践—Alpha冲刺(7)
  2. 本周WEB技术学习情况
  3. IDEA + SSH OA 第一天(IDEA 文件夹类型了解)
  4. .net 错误处理
  5. asp.net mvc4+EF 下使用UEditor
  6. web项目访问路径上为什么不能写上WebContent
  7. DP——P2300 合并神犇
  8. java中main函数怎么调用外部非static方法
  9. Bond UVA - 11354(并查集按秩合并)
  10. Openssl的编译安装以及Vs2012上环境搭建教程