pat甲級1003 Emergency(25点)
1585 ワード
タイトルリンク:
https://pintia.cn/problem-sets/994805342720868352/problems/994805523835109376
テーマ:
これは図の中で最も短いパスのテーマです.ただし、最短パスで頂点の重みの最大値を選択する条件を追加しました.この例ではdijkstraアルゴリズムを使用します.
参照コード:
https://pintia.cn/problem-sets/994805342720868352/problems/994805523835109376
テーマ:
これは図の中で最も短いパスのテーマです.ただし、最短パスで頂点の重みの最大値を選択する条件を追加しました.この例ではdijkstraアルゴリズムを使用します.
参照コード:
#include
#include
#include
using namespace std;
const int maxv=510;
const int inf=1000000000;
i
int n,m,st,ed,G[maxv][maxv],weight[maxv]; //
int d[maxv],w[maxv],num[maxv]; //d[i] i ,w[i]
bool vis[maxv]={false}; //num[i] i ,vis[i]
void Dijkstra(int s){
fill(d,d+maxv,inf);
memset(num,0,sizeof(num)); //fill(num, num + maxv, 0);
memset(w,0,sizeof(w));
d[s]=0; w[s]=weight[s]; num[s]=1; // d, w, num。
for(int i=0;id[u]+G[u][v]){
d[v]=d[u]+G[u][v];
w[v]=w[u]+weight[v];
num[v]=num[u]; // u v , u
// v
}else if(d[u]+G[u][v] == d[v]){
if(w[u]+weight[v]>w[v]){ // , ,
w[v]=w[u]+weight[v];
}
num[v]+=num[u]; // u v , u
// v u
}
}
}
}
}
int main(){
scanf("%d%d%d%d",&n,&m,&st,&ed);
for(int i=0;i