dij优化改解次短路 poj 3255

来源:互联网 发布:马克斯cms x站 编辑:程序博客网 时间:2024/06/10 03:45
#include<stdio.h>#include<string.h>#include<queue>#include<algorithm>#define ll long longusing namespace std;#define inf 0x3f3f3fstruct edge{    int to,val;};typedef pair<int,int >P;int dis[5005],dis2[5005];int main(){    int n,m;    while(~scanf("%d%d",&n,&m))    {vector<edge>G[5005];        for(int i=0; i<m; i++)        {            edge c;            int a;            scanf("%d%d%d",&a,&c.to,&c.val);           c.to--;           a--;            G[a].push_back(c);            swap(c.to,a);            G[a].push_back(c);        }        priority_queue<P,vector<P>,greater<P> >que;      fill(dis,dis+n,inf);       fill(dis2,dis2+n,inf);        dis[0]=0;        que.push(P(0,0));        while(!que.empty())        {            P p=que.top();            que.pop();            int v=p.second,d=p.first;            if(dis2[v]<d)continue;            for(int i=0; i<G[v].size(); i++)            {                edge e=G[v][i];                int d2=d+e.val;                if(dis[e.to]>d2)                {                    swap(dis[e.to],d2);                    que.push(P(dis[e.to],e.to));                }                if(dis2[e.to]>d2&&dis[e.to]<d2)                {                    dis2[e.to]=d2;                    que.push(P(dis2[e.to],e.to));                }            } //printf("ok");        }        printf("%d\n",dis2[n-1]);    }}

0 0