为什么WA on 12、13?
查看原帖
为什么WA on 12、13?
1383823
Zhi_ptb楼主2025/1/23 17:24
#include <bits/stdc++.h>
#define ll long long
#define N 200001
#define mod 998244353
#define all(a) a.begin(),a.end()
#define uniqueu(a) a.erase(unique(all(a)), a.end())
using namespace std;
mt19937_64 mrand(random_device{}());

struct Edge {
    int w, v;
    Edge (int w_, int v_) {
        w = w_; v = v_;
    }
};

vector<Edge> e[N];
int n, m, k;
ll  f[N], dist[N];
bool b[N];

bool spfa(ll p) {
    memset(b, false, sizeof(b));
    for (int i = 1; i <= n; i++)
        dist[i] = INT_MAX;
    queue<int> que;
    que.push(1), b[1] = true, dist[1] = 0;
    for ( ; !que.empty(); ) {
        int x = que.front();
        que.pop(); b[x] = false;
        for (auto &i : e[x])
            if (dist[i.w] > dist[x] + i.v && f[i.w] <= p) {
                dist[i.w] = dist[x] + i.v;
                if (!b[i.w]) {
                    b[i.w] = true;
                    que.push(i.w);
                }
            }
    }
    if (dist[n] >= k)
        return false;
    return true;
}

int main() {
    scanf("%d%d%d", &n, &m, &k);
    ll L = 0, R = 0;
    for (int i = 1; i <= n; i++) {
        scanf("%lld", &f[i]);
        R = max(R, f[i]);
    }
    for (int i = 1; i <= m; i++) {
        int x, y; ll v;
        scanf("%d%d%lld", &x, &y, &v);
        if (x == y)
            continue;
        e[x].push_back(Edge(y, v));
        e[y].push_back(Edge(x, v));
    }
    if (!spfa(1000000001)) {
        puts("AFK");
        return 0;
    }
    for ( ; L + 1 < R; ) {
        ll Mid = (L + R) / 2;
        if (!spfa(Mid))
            L = Mid;
        else
            R = Mid;
    }
    if (!spfa(R))
        puts("AFK");
    else
        printf("%lld\n", R);
}
2025/1/23 17:24
加载中...