洛谷——P1608 路徑統計
阿新 • • 發佈:2017-07-08
span += log 時間 準備 clu pty -m ret
https://www.luogu.org/problem/show?pid=1608
題目描述
“RP餐廳”的員工素質就是不一般,在齊刷刷的算出同一個電話號碼之後,就準備讓HZH,TZY去送快餐了,他們將自己居住的城市畫了一張地圖,已知在他們的地圖上,有N個地方,而且他們目前處在標註為“1”的小鎮上,而送餐的地點在標註為“N”的小鎮。(有點廢話)除此之外還知道這些道路都是單向的,從小鎮I到J需要花費D[I,J]的時間,為了更高效快捷的將快餐送到顧客手中,
他們想走一條從小鎮1到小鎮N花費最少的一條路,但是他們臨出發前,撞到因為在路上堵車而生氣的FYY,深受啟發,不能僅知道一條路線,萬一。。。,於是,他們邀請FYY一起來研究起了下一個問題:這個最少花費的路徑有多少條?
輸入輸出格式
輸入格式:
輸入文件第一行為兩個空格隔開的數N,E,表示這張地圖裏有多少個小鎮及有多少邊的信息。
下面E行,每行三個數I、J、C,表示從I小鎮到J小鎮有道路相連且花費為C.(註意,數據提供的邊信息可能會重復,不過保證I<>J,1<=I,J<=n)。
輸出格式:
輸出文件包含兩個數,分別是最少花費和花費最少的路徑的總數.
兩個不同的最短路方案要求:路徑長度相同(均為最短路長度)且至少有一條邊不重合。
若城市N無法到達則只輸出一個(‘No answer’);
輸入輸出樣例
輸入樣例#1:5 4 1 5 4 1 2 2 2 5 2 4 1 1輸出樣例#1:
4 2
說明
對於30%的數據 N<=20;
對於100%的數據 1<=N<=2000,0<=E<=N*(N-1), 1<=C<=10.
最短路徑條數,註意重邊
1 #include <algorithm> 2 #include <cstring> 3 #include <cstdio> 4 #include <queue> 5 6 using namespace std;7 8 const int N(2333); 9 const int M(N*(N-1)); 10 int n,m,u,v,w,d[N][N]; 11 12 int head[N],sumedge; 13 struct Edge 14 { 15 int u,v,next,w; 16 Edge(int u=0,int v=0,int next=0,int w=0): 17 u(u),v(v),next(next),w(w){} 18 }edge[M]; 19 void ins(int u,int v,int w) 20 { 21 edge[++sumedge]=Edge(u,v,head[u],w); 22 head[u]=sumedge; 23 } 24 25 queue<int>que; 26 int tot,dis[N],cnt[N],inq[N]; 27 void SPFA() 28 { 29 for(int i=1;i<=n;i++) dis[i]=tot+1; 30 que.push(1); inq[1]=1; dis[1]=0; cnt[1]=1; 31 for(int fro;!que.empty();) 32 { 33 fro=que.front();que.pop();inq[fro]=0; 34 if(fro==n) continue; 35 for(int i=head[fro];i;i=edge[i].next) 36 { 37 int v=edge[i].v; 38 if(dis[v]>=dis[fro]+edge[i].w) 39 { 40 if(dis[v]>dis[fro]+edge[i].w) 41 { 42 dis[v]=dis[fro]+edge[i].w; 43 cnt[v]=cnt[fro]; 44 } 45 else cnt[v]+=cnt[fro]; 46 if(!inq[v]) que.push(v),inq[v]=1; 47 } 48 } 49 cnt[fro]=0; 50 } 51 } 52 53 int main() 54 { 55 scanf("%d%d",&n,&m); 56 for(int i=1;i<=m;i++) 57 { 58 scanf("%d%d%d",&u,&v,&w); 59 tot+=w; 60 if(!d[u][v]||d[u][v]>w) 61 { 62 d[u][v]=w; 63 ins(u,v,w); 64 } 65 } 66 SPFA(); 67 if(!cnt[n]) printf("No answer"); 68 else printf("%d %d",dis[n],cnt[n]); 69 return 0; 70 }
洛谷——P1608 路徑統計