挑战程序设计竞赛(第2版)第112页勘误

Posted Farewell

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了挑战程序设计竞赛(第2版)第112页勘误相关的知识,希望对你有一定的参考价值。

整个代码段改为
// 输入

int N, ML, MD;
int AL[MAX_ML], BL[MAX_ML], DL[MAX_ML];
int AD[MAX_MD], BD[MAX_MD], DD[MAX_MD];

int d[MAX_N]; //最短距离
bool updated; // 是否有更新

void update(int& x, int y) {
if (x > y) {
x = y;
updated = true;
}
}

// 用Bellman-Ford算法计算d
void bellmanford() {
for (int k = 0; k <= N; k++) {
updated = false;
// 从i+1到i的权值为0
for (int i = 0; i + 1 < N; i++) {
if (d[i + 1] < INF) update(d[i], d[i + 1]);
}
// 从AL到BL的权值为DL
for (int i = 0; i < ML; i++) {
if (d[AL[i] - 1] < INF) update(d[BL[i] - 1], d[AL[i] - 1] + DL[i]);
}
// 从BD到AD的权值为-DD
for (int i = 0; i < MD; i++) {
if (d[BD[i] - 1] < INF) update(d[AD[i] - 1], d[BD[i] - 1] - DD[i]);
}
}
}

void solve() {
// 检查是否存在负圈
fill(d, d + N, 0);
bellmanford();
if (updated) {
printf("-1\n");
return;
}

fill(d, d + N, INF);
d[0] = 0;
bellmanford();
int res = d[N - 1];
if (res == INF) res = -2;
printf("%d\n", res);
}

以上是关于挑战程序设计竞赛(第2版)第112页勘误的主要内容,如果未能解决你的问题,请参考以下文章

[转] AOJ 0525 Osenbei《挑战程序设计竞赛(第2版)》练习题答案

挑战程序设计竞赛 PDF下载

[jQuery基础教程]第四版第二章勘误

Java编程思想第四版勘误

《Python机器学习算法》勘误

算法竞赛入门经典第2版 第1章