求改错,WA on #3。禁水Dijkstra。
#include <stdio.h>
#include <string.h>
#include <vector>
#include <queue>
using namespace std;
int n, m, s;
struct Edge {
int to, w;
};
vector<Edge> edge[10005];
int dis[10005], flag[10005];
bool vis[10005];
queue<int> q;
inline bool SPFA() {
memset(dis, 0x3f, sizeof dis);
memset(flag, 0, sizeof flag);
memset(vis, false, sizeof vis);
dis[s] = 0; vis[s] = true; q.push(s);
int u, v;
while (!q.empty()) {
u = q.front(); q.pop(); vis[u] = false;
for (int i = 0; i < edge[u].size(); ++i) {
int v = edge[u][i].to;
if (dis[u] + edge[u][i].w < dis[v]) {
dis[v] = dis[u] + edge[u][i].w;
if (!vis[v]) {
vis[v] = true; ++flag[v]; q.push(v);
if (flag[v] >= n)
return false;
}
}
}
}
return true;
}
int main(void) {
scanf("%d %d %d", &n, &m, &s);
for (int i = 1, u, v, w; i <= m; ++i) {
scanf("%d %d %d", &u, &v, &w);
edge[u].push_back((Edge){v, w});
}
if (SPFA()) {
for (int i = 1; i <= n; ++i)
printf("%d " , dis[i]);
puts("");
}
else
puts("Negative ring");
return 0;
}
错误信息:
Wrong Answer. wrong answer On line 1 column 9, read 1, expected 2.