題目描述給出乙個 n
nn 個頂點 m
mm 條邊的無向無權圖,頂點編號為 1
11 ~ nnn。
問從頂點 1
11 開始,到其他每個點的最短路有幾條。
輸入格式第一行包含 2
22 個正整數 n,m
n, m
n,m,為圖的頂點數與邊數。
接下來 m
mm 行,每行兩個正整數 x,y
x, y
x,y,表示有一條頂點 x
xx 連向頂點 y
yy 的邊,請注意可能有自環與重邊。
輸出格式輸出 n
nn 行,每行乙個非負整數,第 i
ii 行輸出從頂點 1
11 到頂點 i
ii 有多少條不同的最短路,由於答案有可能會很大,你只需要輸出 mod
modmo
d100003
100003
100003
後的結果即可。如果無法到達頂點 i
ii 則輸出 000。
樣例樣例輸入
5 71 2
1 32 4
3 42 3
4 54 5
樣例輸出11
124樣例解釋
1
11 到 5
55 的最短路有 4
44 條,分別為 2
22 條 1
−>2−
>4−
>
51->2->4->5
1−>2−
>4−
>
5 和 2
22 條 1
−>3−
>4−
>
51->3->4->5
1−>3−
>4−
>
5 (由於 4
−>
54->5
4−>
5 的邊有2條) 。
資料範圍與提示這道題是道最短路,只是需要求的不再是最短路徑了,而是求從 1對於 20
2020
% 的資料, n
≤100
n ≤ 100
n≤100;
對於 60
6060
% 的資料, n
≤1000
n ≤ 1000
n≤1000
;對於 100
10010
0% 的資料, n
≤100000,0
≤m
≤200000
n ≤ 100000, 0 ≤ m ≤ 200000
n≤1000
00,0
≤m≤2
0000
0。
11 到每個點有多少條最短路徑。
我們可以用 dis
[i
]dis[i]
dis[i]
來儲存 1
11 ~ i
ii 的最短路,用 pre
[i][
j]
pre[i][j]
pre[i]
[j] 來儲存第 i
ii 個點的第 j
jj 個字首。
用 dijkstra 來求出最短路,在求最短路的時候就可以把字首求出來了。
最後把每個點的字首的答案全部加起來就是這個點的答案了。(可能有點繞,看**可能容易理解些~)
正解**如下:
#include
#include
#include
#include
using
namespace std;
const
int inf =
0x3f3f3f3f
;const
int mod =
100003
;const
int maxn =
1e5+5;
int n, m, s, t;
struct edge
edge
(int v,
int w)
friend
bool
operator
<
(edge a, edge b)};
vector<
int> g[maxn]
, pre[maxn]
;int dis[maxn]
, dp[maxn]
;bool vis[maxn]
;void
addedge
(int s,
int t)
void
dijkstra
(int s)}}
}int
dfs(
int n)
intmain()
dijkstra(1
);for(
int i =
1; i <= n; i++
)return0;
}
兔兔 的 題解 Teamwork
區間最值 題目背景 在 f ar me rfarmer farmer j oh njohn john 最喜歡的節日裡,他想要給他的朋友們贈送一些禮物。由於他並不擅長包裝禮物,他想要獲得他的奶牛們的幫助。你可能能夠想到,奶牛們也不是很擅長包裝禮物,而 far me rfarmer farmer j o...
兔兔 的 題解 噴水裝置
題目描述 在乙個長 l ll 公尺,寬 w ww 公尺的草坪裡裝有 n nn 個澆灌噴頭。每個噴頭都裝在草坪中心線上 離兩邊各 w 2 frac w 2 2w 公尺 我們知道每個噴頭的位置 c cc 離草坪中心線左端的距離 以及它能覆蓋到的澆灌範圍 rrr。請問 最少需要開啟多少個噴頭才能澆灌整塊草...
兔兔 的 題解 拆分自然數
題目描述 任何乙個大於 1 11 的自然數 n n 45 n n 45 n n 45 總可以拆分成若干個小於 n nn 的自然數之和。輸入格式 輸入只有 1 11 行,包含 1 11 個整數 n nn 表示需要拆分的數字。輸出格式 對於輸入的 n nn 輸出所有的拆分方法 字典 序小的先 輸出 字典...