poj3268 Silver Cow Party(最短路)

Posted waautomaton

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj3268 Silver Cow Party(最短路)相关的知识,希望对你有一定的参考价值。

非常感谢kuangbin专题啊,这道题一开始模拟邻接表做的,反向边不好处理,邻接矩阵的话舒服多了。

题意:给n头牛和m条有向边,每头牛1~n编号,求所有牛中到x编号去的最短路+回来的最短路的最大值。

技术图片

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;

const int maxn = 1e3 + 5;
const int maxm = 1e5 + 5;
const int inf = 0x3f3f3f3f;
struct edge{
    int s, to, w, next;
} ed[maxm];
int n, m, x;
int mp[maxn][maxn], dis1[maxn], dis2[maxn];
bool vis[maxn];
inline int max( int a, int b ){
    return a>b ? a:b;
}

inline int min( int a, int b ){
    return a<b ? a:b; 
}

inline int dij(){
    //先求了去到x的最短路
    memset( vis, 0, sizeof(vis) );
    memset( dis1, inf, sizeof(dis1) );
    dis1[x] = 0;
    for( int i=1; i<n; i++ ){
        int minid, MIN=inf;
        for( int j=1; j<=n ;j++ ) if( !vis[j] && MIN>dis1[j] ) MIN = dis1[minid=j];
        vis[minid] = 1;
        for( int j=1; j<=n; j++ ) if( !vis[j] ) dis1[j] = min(dis1[j], dis1[minid]+mp[minid][j]);
    }
    //接下来求回去的最短路
    memset( vis, 0, sizeof(vis) );
    memset( dis2, inf, sizeof(dis2) );
    dis2[x] = 0;
    for( int i=1; i<n; i++ ){
        int minid, MIN = inf;
        for( int j=1; j<=n; j++ ) if( !vis[j] && MIN>dis2[j] ) MIN = dis2[minid=j];
        vis[minid] = 1;
        for( int j=1; j<=n; j++ ) if( !vis[j] ) dis2[j] = min( dis2[j], dis2[minid]+mp[j][minid] );
    }
    //遍历求出res
    int res = -inf;
    for( int i=1; i<=n; i++ ) res = max( dis1[i]+dis2[i], res );
    return res;
}

int main(){
    // freopen("in.txt", "r", stdin);
    ios::sync_with_stdio(0);    //加速cin 和 cout读取速度,但是这样的话就不能使用scanf了
    cin.tie(0);
    cout.tie(0);
    cin >> n >> m >> x;
    memset( mp, inf, sizeof(mp) );
    for( int i=1; i<=n; i++ ) mp[i][i] = 0;
    for( int i=0; i<m; i++ ){
        int u, v, w;
        cin >> u >> v >> w;
        mp[u][v] = w;
    }
    cout << dij() << endl;

    return 0;
}

 

以上是关于poj3268 Silver Cow Party(最短路)的主要内容,如果未能解决你的问题,请参考以下文章

POJ 3268 Silver Cow Party (Dijkstra)

POJ3268 Silver Cow Party —— 最短路

POJ 3268 Silver Cow Party

POJ 3268 Silver Cow Party

poj 3268 Silver Cow Party

POJ-3268 Silver Cow Party( 最短路 )