思路:定義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.核心演算法 ...