1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
#include <cstdlib> #include <cstring> #include <algorithm> #define INF 0x3f3f3f3f using namespace std; typedef long long ll; int mp[105][105],E,V,vis[105],d[105],pre[105]; void (int o){ int lst,at,i,j; fill(d,d+V,INF); memset(vis,0,sizeof(vis)); if(o)memset(pre,-1,sizeof(pre)); d[0]=0; for(i=0;i<V;i++){ for(lst=INF,j=0;j<V;j++) if(!vis[j]&&d[j]<lst)at=j,lst=d[j]; vis[at]=1; for(j=0;j<V;j++) if(d[j]>d[at]+mp[at][j]){ d[j]=d[at]+mp[at][j]; if(o)pre[j]=at; } } } int main(){ scanf("%d%d",&V,&E); memset(mp,0x3f,sizeof(mp)); int i,j,u,v,ans=0,rec; for(i=0;i<E;i++) scanf("%d%d%d",&u,&v,&j), u--,v--,mp[u][v]=mp[v][u]=j; dijkstra(1),rec=d[V-1]; for(i=V-1;i!=-1;i=pre[i]) if(pre[i]!=-1) mp[i][pre[i]]<<=1, mp[pre[i]][i]<<=1, dijkstra(0), ans=max(ans,d[V-1]-rec), mp[i][pre[i]]>>=1, mp[pre[i]][i]>>=1; printf("%dn",ans); return 0; }
|
近期评论