「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:1 5 4
1 2 2
2 5 2
4 1 1
4 2對於30%的資料 n<=20;
對於100%的資料 1<=n<=2000,0<=e<=n*(n-1), 1<=c<=10.
1/*2**統計路徑沒什麼好說的
3但是這個題目有坑 它有重邊
4只能取最小值
5但是我直接修改鍊錶為啥不對呢
6難道只能新建邊 7*/
8 #include9 #include10 #include11
#define maxn 2010
1213
using
namespace
std;
1415
intm,n,dis[maxn],cnt[maxn];
1617
intmap[maxn][maxn];
1819
struct
node ;
24 node e[maxn*maxn];
2526
inthead[maxn],tot;
2728 queueq;
2930
bool
vis[maxn];
3132 inline void read(int&x)
35while(c>='
0'&&c<='
9') x=10*x+c-48,c=getchar();
36 x=x*f;37}
3839 inline void add(int x,int y,int
val)
*/45 e[++tot].to=y;
46 e[tot].val=val;
47 e[tot].next=head[x];
48 head[x]=tot;49}
5051 inline void
spfa()
68if(!vis[i]) 72}
*/73
for(int i=head[u];i;i=e[i].next) 82}
83}84}
85}86int
main() 94}
95spfa();
96if(dis[n]==1e9) printf("
no answer\n");
97else printf("
%d %d\n
",dis[n],cnt[n]);
98return0;
99 }
洛谷 P1608 路徑統計
洛谷傳送門 rp 餐廳 的員工素質就是不一般,在齊刷刷的算出同乙個 號碼之後,就準備讓 hzh,tzy 去送快餐了,他們將自己居住的城市畫了一張地圖,已知在他們的地圖上,有 nn 個地方,而且他們目前處在標註為 1 的小鎮上,而送餐的地點在標註為 n 的小鎮。有點廢話 除此之外還知道這些道路都是單向...
洛谷 P1608 路徑統計
rp餐廳 的員工素質就是不一般,在齊刷刷的算出同乙個 號碼之後,就準備讓hzh,tzy去送快餐了,他們將自己居住的城市畫了一張地圖,已知在他們的地圖上,有n個地方,而且他們目前處在標註為 1 的小鎮上,而送餐的地點在標註為 n 的小鎮。有點廢話 除此之外還知道這些道路都是單向的,從小鎮i到j需要花費...
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...