*7.
2.
01 #include <cstdio>
03 const int N = 5010;
04 const int M = 20010;
05 const int inf = 1073741823;
07 int e, bg[N], nx[M], to[M], wt[M];
08 inline void link(int u, int v, int w) {
09 to[++e] = v;
10 nx[e] = bg[u];
11 wt[e] = w;
12 bg[u] = e;
13 }
14
15 int n, m, u, v, w;
16 int f[N], h[N << 1];
17
18 void update(int x, int y) {
19 x += n - 1;
20 for (h[x] = y; x; x >>= 1)
21 h[x >> 1] = f[h[x]] < f[h[x^1]] ? h[x] : h[x^1];
22 }
23
24 int main() {
25 scanf("%d%d", &n, &m);
26 for (int i = 0; i != m; ++i) {
27 scanf("%d%d%d", &u, &v, &w);
28 link(u, v, w);
29 }
30 int nn = n << 1;
31 for (int i = 1; i <= n; ++i) {
32 for (int j = 1; j != nn; ++j)
33 h[j] = 0;
34 for (int j = 0; j <= n; ++j)
35 f[j] = inf;
36 f[i] = 0;
37 update(i, i);
38 for (int j = i; true; j = h[1]) {
39 if (f[j] == inf) break;
40 for (int k = bg[j]; k; k = nx[k]) {
41 if (f[j] + wt[k] < f[to[k]]) {
42 f[to[k]] = f[j] + wt[k];
43 update(to[k], to[k]);
44 }
45 }
46 update(j, 0);
47 }
48 for (int j = 1; j <= n; ++j)
49 printf("%d%c", f[j], "\n "[j != n]);
50 }
51 return 0;
52 }
以下程序的输入是一张带边权的有向图,完成下面的判断题和单选题:
⚫ 判断题
1) 将程序中所有的 “!=” 替换为 “<”,程序将仍然正常运行且输出的结
果不会改变。 ( )