洛谷—— P1629 郵遞員送信
阿新 • • 發佈:2017-08-19
%d bsp n-1 表示 所有 div 最終 inline problem
https://www.luogu.org/problem/show?pid=1629
題目描述
有一個郵遞員要送東西,郵局在節點1.他總共要送N-1樣東西,其目的地分別是2~N。由於這個城市的交通比較繁忙,因此所有的道路都是單行的,共有M條道路,通過每條道路需要一定的時間。這個郵遞員每次只能帶一樣東西。求送完這N-1樣東西並且最終回到郵局最少需要多少時間。
輸入輸出格式
輸入格式:
第一行包括兩個整數N和M。
第2到第M+1行,每行三個數字U、V、W,表示從A到B有一條需要W時間的道路。 滿足1<=U,V<=N,1<=W<=10000,輸入保證任意兩點都能互相到達。
【數據規模】
對於30%的數據,有1≤N≤200;
對於100%的數據,有1≤N≤1000,1≤M≤100000。
輸出格式:
輸出僅一行,包含一個整數,為最少需要的時間。
輸入輸出樣例
輸入樣例#1:5 10 2 3 5 1 5 5 3 5 6 1 2 8 1 3 8 5 3 4 4 1 8 4 5 3 3 5 6 5 4 2輸出樣例#1:
83
正反兩邊SPFA
1 #include <algorithm> 2 #include <cstring> 3 #include <cstdio> 4#include <queue> 5 6 using namespace std; 7 8 const int N(1000+5); 9 const int M(100005); 10 int n,m; 11 long long ans; 12 int hed[N],had[N],sumedge; 13 struct Edge 14 { 15 int v,next,w; 16 Edge(int v=0,int next=0,int w=0): 17 v(v),next(next),w(w){} 18 }edge[M<<1]; 19 inline void ins(int u,int v,int w,int *head) 20 { 21 edge[++sumedge]=Edge(v,head[u],w); 22 head[u]=sumedge; 23 } 24 25 bool inq[N]; 26 queue<int>que; 27 int dis1[N],dis2[N]; 28 inline void SPFA_1() 29 { 30 memset(dis1,127/3,sizeof(dis1)); 31 dis1[1]=0; que.push(1); inq[1]=1; 32 for(int u,v;!que.empty();) 33 { 34 u=que.front(); que.pop(); inq[u]=0; 35 for(int i=hed[u];i;i=edge[i].next) 36 { 37 v=edge[i].v; 38 if(dis1[v]>dis1[u]+edge[i].w) 39 { 40 dis1[v]=dis1[u]+edge[i].w; 41 if(!inq[v]) inq[v]=1,que.push(v); 42 } 43 } 44 } 45 } 46 inline void SPFA_2() 47 { 48 memset(dis2,127/3,sizeof(dis2)); 49 dis2[1]=0; que.push(1); inq[1]=1; 50 for(int u,v;!que.empty();) 51 { 52 u=que.front(); que.pop(); inq[u]=0; 53 for(int i=had[u];i;i=edge[i].next) 54 { 55 v=edge[i].v; 56 if(dis2[v]>dis2[u]+edge[i].w) 57 { 58 dis2[v]=dis2[u]+edge[i].w; 59 if(!inq[v]) inq[v]=1,que.push(v); 60 } 61 } 62 } 63 } 64 65 int main() 66 { 67 scanf("%d%d",&n,&m); 68 for(int u,v,w,i=1;i<=m;i++) 69 { 70 scanf("%d%d%d",&u,&v,&w); 71 ins(u,v,w,hed);ins(v,u,w,had); 72 } 73 SPFA_1(); SPFA_2(); 74 for(int i=2;i<=n;i++) ans+=(long long)dis1[i]+dis2[i]; 75 printf("%lld\n",ans); 76 return 0; 77 }
洛谷—— P1629 郵遞員送信