程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> POJ3268 Silver Cow Party

POJ3268 Silver Cow Party

編輯:C++入門知識

PS: 對原圖和反圖求最短路,然後求最長的即可。省賽熱身練習。

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
const int maxn = 1010;
const int INF = 0x3ffffff;
//Accepted	468K	63MS
struct edges {
    int from, to, w;
};

int n, m, s;
int d1[maxn];
int d2[maxn];

queue que;
bool inque[maxn];

void spfa(vector G[], int d[]) {
    while(!que.empty()) que.pop();
    memset(inque, false, sizeof(inque));
    for(int i = 1; i <= n; i++) d[i] = INF;
    d[s] = 0;
    inque[s] = true;
    que.push(s);
    while(!que.empty()) {
        int u = que.front(); que.pop();
        for(int i = 0; i < (int)G[u].size(); i++) {
            edges v = G[u][i];
            if(d[u]!=INF && d[u]+v.w < d[v.to]) {
                d[v.to] = d[u] + v.w;
                if(!inque[v.to]) {
                    inque[v.to] = true;
                    que.push(v.to);
                }
            }
        }
        inque[u] = false;
    }
}

int work() {
    int ans = -INF;
    for(int i = 1; i <= n; i++) {
        if(d1[i]+d2[i]>ans) {
            ans = d1[i] + d2[i];
        }
    }
    return ans;
}

vector G[maxn];
vector RG[maxn];
int main()
{
    edges t;
    int from, to, w;
    while(scanf("%d%d%d", &n, &m, &s)!=EOF) {
        for(int i = 1; i <= m; i++) {
           scanf("%d%d%d", &from, &to, &w);
           t.from = from;
           t.to = to;
           t.w = w;
           G[from].push_back(t);
           t.from = to;
           t.to = from;
           RG[t.from].push_back(t);
        }
        spfa(G, d1);
        spfa(RG, d2);
        int res = work();
        printf("%d\n", res);
    }
    return 0;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved