PAT 1003 Emergency 單源最短路

2021-08-04 22:55:27 字數 1391 閱讀 5761

思路:定義wa

ys[i

] 表示到達i的最短路徑數量,d[

i]表示到達i的最短徑,cn

t[i]

表示最短路徑到達i的最多人數,w[

i][j

] 表示從i到j的距離, te

am[i

] 表示i點的人數。每次從u去更新某個節點v的時候,考慮兩種情況:

1、d[

v]>d[

u]+w

[u][

v],說明到達v新的最短路徑產生了,那麼更新d[

v],此時cn

t[v]

=cnt

[u]+

team

[v] ,wa

ys[v

]=wa

ys[u

] ;

2、d[

v]==d

[u]+

w[u]

[v] ,說明又有一條最短路徑到達v點,此時更新cn

t[v]

=max

(cnt

[v],

cnt[

u]+t

eam[

v]) ,wa

ys[v

]+=w

ays[

u];ac**

#include 

#include

#include

using

namespace

std;

#define inf 0x3f3f3f3f

typedef

long

long ll;

const

int maxn = 500+5;

int w[maxn][maxn], team[maxn], vis[maxn];

int d[maxn], cnt[maxn], ways[maxn];

int n, m, c1, c2;

void dij(int s)

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

} vis[u] = 1;

for(int j = 0; j < n; j++) else

if(d[j] == d[u] + w[u][j]) }}

}int main()

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

int u, v, dis;

for(int j = 0; j < m; j++)

dij(c1);

printf("%d %d\n", ways[c2], cnt[c2]);

return

0;}

如有不當之處歡迎指出!

(自用隨筆)PAT A1003 Emergency

include include define maxn 100000000 int n,m,c1,c2 int wei 505 int w 505 到點v的最大點權之和 int g 505 505 int num 505 到點v的最短路徑條數 int d 505 int vis 505 void d...

PAT乙級 1003 數素數

時間限制 1000 ms 記憶體限制 32768 kb 長度限制 100 kb 判斷程式 standard 來自 小小 令pi表示第i個素數。現任給兩個正整數m n 10000,請輸出pm到pn的所有素數。輸入在一行中給出m和n,其間以空格分隔。輸出從pm到pn的所有素數,每10個數字佔1行,其間以...

PAT甲級1003題解 Dijkstra

解題步驟 1.初始化 設定mat存放點之間的距離,vis存放點的選取情況,people存放初始時每個城市的人數,man存放到達每個城市的救援隊的最多的人數,num存放到達每個城市的最多的人數 在最短路徑的基礎之上 dist存放從起點開始到達每個城市的最短的路徑 隨著每次選取點而更新 2.核心演算法 ...