点的最短路,这样就一次是来的,一次是走的,相加迭代最大值即可
代码:
/* poj 3268 8108K 47MS */ #include<cstdio> #include<iostream> #define MAXN 1005 #define MAX_INT 2147483647 using namespace std; int gra_in[MAXN][MAXN],gra_out[MAXN][MAXN],n,m,p,dist_in[MAXN],dist_out[MAXN]; void init() { cin>>n>>m>>p; for(int i = 1;i <= m;i ++) { int a,b,c; scanf("%d %d %d",&a,&b,&c); gra_out[a][b] = c; gra_in[b][a] = c; } } void dijkstra(int gra[MAXN][MAXN] , int dist[MAXN]) { bool mark[MAXN] = {false}; for(int i = 1;i <= n;i ++) dist[i] = MAX_INT; dist[p] = 0; for(int i = 1;i <= n;i ++) { int Min = MAX_INT,tj; for(int j = 1;j <= n;j ++) { if(mark[j]) continue; if(Min > dist[j]) { Min = dist[j]; tj = j; } } mark[tj] = true; for(int j = 1;j <= n;j ++) { if(mark[j] || !gra[tj][j]) continue; dist[j] = min(dist[j] , dist[tj] + gra[tj][j]); } } } int main() { init(); dijkstra(gra_in , dist_in); dijkstra(gra_out , dist_out); int Max = 0; for(int i = 1;i <= n;i ++) Max = max(Max , dist_in[i] + dist_out[i]); cout<<Max<<endl; return 0; }
POJ 3268 Silver Cow Party dijkstra单源最短路,布布扣,bubuko.com
POJ 3268 Silver Cow Party dijkstra单源最短路
原文地址:http://blog.csdn.net/u013687632/article/details/27101343