求调!样例全过,测试点1本地也过了,为啥提交上去会wa呢?
查看原帖
求调!样例全过,测试点1本地也过了,为啥提交上去会wa呢?
675208
coder2009楼主2025/8/3 21:47

如题,搞了一晚上这条个结果,真郁闷 测试点1本地能过,为啥提交上去过不去呢,太奇怪了

#include <bits/stdc++.h>

using namespace std;
const int maxn = 205;
#define ll long long
const ll INF = 0x3f3f3f3f3f3f;

int n, m, x[maxn], y[maxn];
ll c[maxn], d[maxn];

struct solve {
    struct edge {
        ll w;
        int id;
    } g[maxn][maxn];
    ll dist[maxn];
    int from[maxn], s;
    bool vis[maxn], key[maxn];

    solve () {
        memset(g, -1, sizeof(g));
        memset(from, 0, sizeof(from));
        memset(key, false, sizeof(key));
    }

    void add(int u, int v, ll w, int id) {
        g[u][v] = {w, id};
    }

    void dijstra() {
        for (int i = 1; i <= n; ++i) {
            dist[i] = INF;
            vis[i] =  false;
        }
        dist[s] = 0;
        for (int i = 1; i <= n; ++i) {
            int u = 0;
            for (int j = 1; j <= n; ++j) {
                if (!u && !vis[j]) {
                    u = j;
                    continue;
                }
                if (!vis[j] && dist[j] < dist[u] && dist[j] != INF) {
                    u = j;
                }
            }
            vis[u] = true;
            for (int v = 1; v <= n; ++v) {
                ll w = g[u][v].w;
                if (g[u][v].id == -1) {
                    continue;
                }
                if (dist[v] > dist[u] + w) {
                    dist[v] = dist[u] + w;
                    from[v] = g[u][v].id;
                }
            }
        }
        for (int i = 1; i <= n; ++i) {
            key[from[i]] = true;
        }
    }
} a[10];

void best_coder() {
    cin >> n >> m;
    a[1].s = 1;
    a[2].s = n;
    a[3].s = 1;
    a[4].s = n;
    a[5].s = 1;
    a[6].s = n;
    for (int i = 1; i <= m; ++i) {
        cin >> x[i] >> y[i] >> c[i] >> d[i];
        a[1].add(x[i], y[i], c[i], i);
        a[2].add(x[i], y[i], c[i], i);
        a[3].add(y[i], x[i], c[i], i);
        a[4].add(y[i], x[i], c[i], i);
        a[5].add(x[i], y[i], c[i], i);
        a[6].add(x[i], y[i], c[i], i);
    }
    for (int i = 1; i <= 4; ++i) {
        a[i].dijstra();
    }
    ll ans = a[1].dist[n] + a[2].dist[1];
    for (int i = 1; i <= m; ++i) {
        if (a[1].key[i] || a[2].key[i]) {
            a[5].g[x[i]][y[i]] = {-1, -1};
            a[6].g[x[i]][y[i]] = {-1, -1};
            a[5].g[y[i]][x[i]] = {c[i], i};
            a[6].g[y[i]][x[i]] = {c[i], i};
            a[5].dijstra();
            a[6].dijstra();
            ans = min(ans, a[5].dist[n] + a[6].dist[1] + d[i]);
            a[5].g[y[i]][x[i]] = {-1, -1};
            a[6].g[y[i]][x[i]] = {-1, -1};
            a[5].g[x[i]][y[i]] = {c[i], i};
            a[6].g[x[i]][y[i]] = {c[i], i};
        } else {
            ll d1 = min(a[1].dist[n], a[1].dist[y[i]] + c[i] + a[4].dist[x[i]]);
            ll d2 = min(a[2].dist[1], a[2].dist[x[i]] + c[i] + a[3].dist[y[i]]);
            ans = min(ans, d[i] + d1 + d2);
        }
    }
    if (ans >= INF) {
        cout << -1 << "\n";
        return;
    }
    cout << ans << "\n";;
}


void coder() {

}


int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    best_coder();

    return 0;
}

2025/8/3 21:47
加载中...