poj3668 spfa
来源:互联网 发布:谢朝阳 云计算 编辑:程序博客网 时间:2024/05/20 05:10
#include <iostream>#include <cstdio>#include <queue>#include <vector>#include <cstring>using namespace std;//求多点到一定点的距离是, 可以建立反图,后就转化为求定点到各点的最短路径问题。const int M = 1005;const int inf = 99999999;struct node { int to; int w; node(int tto, int ww) : to(tto), w(ww){}};int n, m, x;int vist[M];vector<node>g[M], rg[M];int dist1[M], dist2[M];void spfa(int s, vector<node> gr[], int *dist) { queue<int>que; for(int i = 0; i <= n; i++) dist[i] = inf; memset(vist, 0, sizeof(vist)); vist[s] = 1; que.push(s); dist[s] = 0; while(!que.empty()) { int v = que.front(); que.pop(); vist[v] = 0; for(int i = 0; i < (int)gr[v].size(); i++) { node p = gr[v][i]; if(dist[p.to] > dist[v] + p.w) { dist[p.to] = dist[v] + p.w; if(!vist[p.to]) { vist[p.to] = 1; que.push(p.to); } } } }}int main(){ int a, b, t; while(scanf("%d%d%d", &n, &m, &x) != EOF) { for(int i = 0; i < m; i++) { scanf("%d%d%d", &a, &b, &t); g[a].push_back(node(b, t)); rg[b].push_back(node(a, t)); } spfa(x, g, dist1); spfa(x, rg, dist2); int ans = 0; for(int i = 1; i <= n; i++) { if(dist1[i] != inf&&dist2[i] != inf) ans = max(ans, dist1[i]+dist2[i]); } printf("%d\n", ans); } return 0;}
0 0
- poj3668 spfa
- poj3668
- SPFA
- spfa
- spfa
- SPFA
- SPFA
- SPFA
- SPFA
- spfa
- SPFA
- SPFA
- SPFA
- SPFA
- SPFA
- spfa
- spfa
- spfa
- 计算机游戏者战略编写员教程
- 非官方个梵蒂冈发的
- POJ 3660 && NYIST 211 Cow Contest && ZOJ 1060 Sorting It All Out【Floyd算法扩展应用】
- Enjoy JAVA
- VS2012+CUDA6.0配置方法
- poj3668 spfa
- spoj 61 Brackets(线段树)
- Ubuntu14下Hadoop开发<1> 基础环境安装
- hdu 2577 DP
- java 虚拟机上的轻型线程和actor (非akka)——————quasar/Pulsar
- 初学Web接口调用的一些学习笔记
- Linux下通过yum安装mysql
- android数据存储_内部存储
- 学习笔记