poj 3255

来源:互联网 发布:2017年云南旅游数据 编辑:程序博客网 时间:2024/05/17 22:49
#include <bits/stdc++.h>using namespace std;#define INF 0x7fffffftypedef pair<int, int> P;#define maxn 100000+10struct edge{    int to;    int cost;    edge(){}    edge(int to_, int cost_)    {        to = to_;        cost = cost_;    }};int d[maxn], d2[maxn];int N, R;vector<edge> G[maxn];void dijkstra(int s){    priority_queue<P, vector<P>, greater<P> >que;    fill(d, d+N, INF);    fill(d2, d2+N, INF);    d[s] = 0;    que.push(P(0,s));    while(!que.empty())    {        P p = que.top();        que.pop();        int v = p.second, dist = p.first;        if(d2[v] < dist) continue;        for(int i=0; i<G[v].size(); i++)        {            edge e = G[v][i];            int a = dist + e.cost;            if(d[e.to] > a)            {                swap(d[e.to] , a);                que.push(P(d[e.to], e.to));            }            if(d2[e.to] > a && d[e.to] < a)            {                d2[e.to] = a;                que.push(P(d2[e.to], e.to));            }        }    }}int main(){    cin>>N>>R;    int u, v, w;    for(int i=0; i<R; i++)    {        cin>>u>>v>>w;        G[u-1].push_back(edge(v-1, w));        G[v-1].push_back(edge(u-1, w));    }     dijkstra(0);     cout<<d2[N-1]<<endl;    return 0;}

0 0