80pts 求助
查看原帖
80pts 求助
817524
CR400BFAZ5254楼主2025/7/1 20:53
#include<bits/stdc++.h>
#define MAXN 10010
using namespace std;
using ll=long long;
ll n,m,b;
typedef pair<int,int> pii;
vector<pii> e[MAXN];
ll s[MAXN];
ll dis[MAXN];
bool vis[MAXN];
bool dij(ll bl){
    memset(vis,0,sizeof vis);
    memset(dis,0x3f3f3f,sizeof dis);
    dis[1]=0;
    priority_queue<pii,vector<pii>,greater<pii>> pq;
    pq.push({0,1});
    while(!pq.empty()){
        pii x;
        x=pq.top();pq.pop();
        int u=x.second;
        if(vis[u]) continue;
        vis[u]=1;
        for(auto vv:e[u]){
            int v=vv.first;ll w=vv.second;
            if(s[v]>bl) continue;
            if(dis[v]>dis[u]+w){
                dis[v]=dis[u]+w;
                if(!vis[v]) pq.push({dis[v],v});
            }
        }
    }
    return dis[n]<=b;
}
int main(){
    ll l=0,r=0;
    cin >> n >> m >> b;
    for(int i=1;i<=n;i++){
        cin >> s[i];
        r=max(r,s[i]);
    }
    l=max(s[1],s[n]);
    for(int i=1;i<=m;i++){
        ll u,v,w;
        cin >> u >> v >> w;
        e[u].push_back({v,w});
        e[v].push_back({u,w});
    }
    while(l<r){
        ll mid=(l+r)>>1ll;
        if(dij(mid)) r=mid-1;
        else l=mid+1;
       // cout << l << " " << r << " " << mid << endl;
    }
    if(!dij(r)) cout << "AFK";
    else cout << r;


    return 0;
}
2025/7/1 20:53
加载中...