我至今仍未知道为什么#2会RE:https://www.luogu.com.cn/record/36420737
代码:
#define LOCAL
#include <cstdio>
#define INF 0x3ffffff
#define V_MAX 1005
int edges[V_MAX][V_MAX];
int costs[V_MAX];
int E;
int V;
int S;
void init() {
for(int i = 0; i < V_MAX; i++) {
for(int j = 0; j < V_MAX; j++) {
edges[i][j] = INF;
}
}
}
void readData() {
scanf("%d%d", &V, &E);
scanf("%d", &S);
S--;
for(int i = 0; i < E; i++) {
int start_point;
int end_point;
int len;
scanf("%d%d%d", &start_point, &end_point, &len);
start_point -= 1;
end_point -= 1;
edges[start_point][end_point] = (len < edges[start_point][end_point]) ?
len : edges[start_point][end_point];
}
}
void bellman() {
for(int i = 0; i < V_MAX; i++) {
costs[i] = edges[S][i];
}
costs[S] = 0;
for(int i = 0; i < V; i++) {
for(int u = 0; u < V; u++) {
if(u == S) {
continue;
}
for(int v = 0; v < V; v++) {
if(edges[u][v] < INF && costs[u] + edges[u][v] < costs[v]) {
costs[v] = costs[u] + edges[u][v];
}
}
}
}
}
int main() {
#ifdef LOCAL
freopen("in.txt", "r", stdin);
#endif
init();
readData();
#ifdef LOCAL
for(int i = 0; i < V; i++) {
for(int j = 0; j < V; j++) {
printf("%d\t", edges[i][j]);
}
printf("\n");
}
#endif
bellman();
for(int i = 0; i < V; i++) {
printf("%d ", costs[i]);
}
return 0;
}