洛谷 P1608 路徑統計

2022-04-04 15:27:35 字數 2716 閱讀 3163

「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.

這個題spfa有坑,用dij

/*

同最短路數

*/#include

#include

#include

#include

#include

#define maxn 4000010

using

namespace

std;

intn,m,tot;

int map[2010][2010

];int

dis[maxn],vis[maxn],ans[maxn];

intto[maxn],net[maxn],head[maxn],cap[maxn];

intread()

while(ch>='

0'&&ch<='9')

return x*f;

}void add(int u,int v,int

w)void spfa(int

s) }

else

if(dis[to[i]]==dis[now]+cap[i])

}ans[now]=0

; }

}int

main()

for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++)

if(map[i][j]!=0x7f7f7f7f

) add(i,j,map[i][j]);

spfa(1);

if(dis[n]!=0x7f7f7f7f) printf("

%d %d\n

",dis[n],ans[n]);

else printf("

no answer\n");

}

spfa100

/*

同最短路數

*/#include

#include

#include

#include

#include

#define maxn 4000010

using

namespace

std;

intn,m,tot;

int map[2010][2010

];struct nond;

intdis[maxn],vis[maxn],ans[maxn];

intto[maxn],net[maxn],head[maxn],cap[maxn];

intread()

while(ch>='

0'&&ch<='9')

return x*f;

}bool

operator

< (const nond &a,const nond &b)

void add(int u,int v,int

w)void dijkstra(int

be));ans[be]=1

;

while(!que.empty()));

}else

if(dis[to[i]]==dis[now.id]+cap[i])

ans[to[i]]+=ans[now.id];

}}int

main()

for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++)

if(map[i][j]!=0x7f7f7f7f

) add(i,j,map[i][j]);

dijkstra(1);

if(dis[n]!=0x7f7f7f7f) printf("

%d %d\n

",dis[n],ans[n]);

else printf("

no answer\n");

}

dijkstra100

洛谷 P1608 路徑統計

rp餐廳 的員工素質就是不一般,在齊刷刷的算出同乙個 號碼之後,就準備讓hzh,tzy去送快餐了,他們將自己居住的城市畫了一張地圖,已知在他們的地圖上,有n個地方,而且他們目前處在標註為 1 的小鎮上,而送餐的地點在標註為 n 的小鎮。有點廢話 除此之外還知道這些道路都是單向的,從小鎮i到j需要花費...

洛谷 P1608 路徑統計

洛谷傳送門 rp 餐廳 的員工素質就是不一般,在齊刷刷的算出同乙個 號碼之後,就準備讓 hzh,tzy 去送快餐了,他們將自己居住的城市畫了一張地圖,已知在他們的地圖上,有 nn 個地方,而且他們目前處在標註為 1 的小鎮上,而送餐的地點在標註為 n 的小鎮。有點廢話 除此之外還知道這些道路都是單向...

spfa 洛谷P1608 路徑統計

spfa最短路計數 我們在spfa裡面修改就好了 我們增加乙個cnt陣列,表示到達這個點的最短路總方案 但是這樣的話在傳遞方面有問題 我們怎麼辦呢 對於乙個點x 我們列舉另乙個點k if d x g x k d k cnt k cnt x if d x g x k d k d x g x k cnt...