洛谷P1144 題解 最短路計數

2022-05-16 11:31:25 字數 774 閱讀 7310

這道題可以用各種演算法踩掉,我選擇的是spfa。

因為題目要求計數,所以我們開乙個ans陣列表示數量。

分兩種情況討論:

一:dis_v>dis_u+1

最短路被更新了,可以直接ans_v=ans_u覆蓋。

二:dis_v==dis_u+1

又找到一條最短路,將條數相加即可。

具體看**:

#include#define mod 100003

using

namespace

std;

struct

edge e[

4500000

];int head[1200000

],cnt;

inline

void adde(int u,int

v) int

n,m;

//ans表示最短路條數

int dis[1200000],vis[1200000],ans[1200000

];queue

q;//稍加改動的spfa

inline void

spfa()

}else

if(dis[v]==dis[u]+1

) }

}}int

main()

ans[

1]=1;//

記得初始化

spfa();

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

return0;

}

洛谷P1144最短路計數題解

此題還是尋找從1到i點總共有幾個最短路且每條邊的邊長為1,對於這種尋找最短路的個數,我們可以反向搜尋,即先用 spfa 預處理出所有點的最短路,然後我們反向記憶化搜尋,可以用 sum i 表示從i到1的最短路個數,然後我們初始化 sum 1 1 然後就可以了 include include incl...

洛谷 P1144 最短路計數 題解

給出乙個 n 個頂點 m 條邊的無向無權圖,頂點編號為 1 n 問從頂點 1 開始,到其他每個點的最短路有幾條。第一行包含 2 個正整數 n,m 為圖的頂點數與邊數。接下來 m 行,每行 2 個正整數 x,y 表示有一條頂點 x 連向頂點 y 的邊,請注意可能有自環與重邊。共nn行,每行乙個非負整數...

題解 洛谷P1144 最短路計數

題面 我們考慮在每一次 dijkstra 演算法時,記錄一下從 1 sim i 最短路徑的條數。具體地說,我們在每一次遍歷節點時 注意判等於要放在判大於之前。include using namespace std const int n 1000003,m 4000003,mod 100003 in...