洛谷傳送門
「rp 餐廳」 的員工素質就是不一般,在齊刷刷的算出同乙個**號碼之後,就準備讓 hzh,tzy 去送快餐了,他們將自己居住的城市畫了一張地圖,已知在他們的地圖上,有 nn 個地方,而且他們目前處在標註為 「1」 的小鎮上,而送餐的地點在標註為 「n」 的小鎮。(有點廢話)除此之外還知道這些道路都是單向的,從小鎮 ii 到 jj 需要花費 d[i, j]d[i,j] 的時間,為了更高效快捷的將快餐送到顧客手中,他們想走一條從小鎮 11 到小鎮 nn 花費最少的一條路,但是他們臨出發前,撞到因為在路上堵車而生氣的 fyy,深受啟發,不能僅知道一條路線,萬一。。。於是,他們邀請 fyy 一起來研究起了下乙個問題:這個最少花費的路徑有多少條?
輸入檔案第一行為兩個空格隔開的數 nn,ee,表示這張地圖裡有多少個小鎮及有多少邊的資訊。
下面 ee 行,每行三個數 ii、jj、cc,表示從 ii 小鎮到 jj 小鎮有道路相連且花費為 cc.(注意,資料提供的邊資訊可能會重複,不過保證 i\not=ji=j,1 \leq i1≤i,j\leq nj≤n)。
輸出檔案包含兩個數,分別是最少花費和花費最少的路徑的總數.
兩個不同的最短路方案要求:路徑長度相同(均為最短路長度)且至少有一條邊不重合。
若城市 nn 無法到達則只輸出乙個no answer
dij求最短路+最短路計數。
最短路計數的部落格請見:
**最短路計數
**:
#include#include#includeusing namespace std;
const int maxn=2010;
int n,e;
int mp[maxn][maxn];
int tot,head[maxn],nxt[maxn*maxn],to[maxn*maxn],val[maxn*maxn];
void add(int x,int y,int z)
priority_queue>q;
int dist[maxn],cnt[maxn];
bool v[maxn];
void dijkstra()
} dijkstra();
if(dist[n]>1e9)
printf("%d %d",dist[n],cnt[n]);
return 0;
}
洛谷 P1608 路徑統計
rp餐廳 的員工素質就是不一般,在齊刷刷的算出同乙個 號碼之後,就準備讓hzh,tzy去送快餐了,他們將自己居住的城市畫了一張地圖,已知在他們的地圖上,有n個地方,而且他們目前處在標註為 1 的小鎮上,而送餐的地點在標註為 n 的小鎮。有點廢話 除此之外還知道這些道路都是單向的,從小鎮i到j需要花費...
洛谷 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...