好长时间没打SPFA了,结果。。。
查看原帖
好长时间没打SPFA了,结果。。。
214696
Dry_ice楼主2020/9/10 22:57

求改错,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.
2020/9/10 22:57
加载中...