萌新求助,不知为啥一直re

P1462 通往奥格瑞玛的道路

a1071677765 @ 2019-07-11 14:33:10

#include <bits/stdc++.h>
using namespace std;
const long long inf=0x3fffffff;
struct node{
    long long v,w,nxt;
}e[1000015];
struct qnode{
    long long d,id;
};
bool operator < (const qnode &a,const qnode &b)
{
    return a.d>b.d;
}
long long head[100015];
long long cnt=0;
long long d[100105];
long long vis[100015];
long long w[101005];
long long a[101005];
void add(long long u,long long v,long long w)
{
    e[++cnt].v=v;
    e[cnt].w=w;
    e[cnt].nxt=head[u];
    head[u]=cnt;
}
long long n,m,b;
long long x,y,z;
priority_queue<qnode>q;
bool check(long long x)
{
    if(x<w[1]||x<w[n]) return 0;
    for(int i=1;i<=n;i++) d[i]=inf;
    d[1]=0;
    qnode kk;
    kk.id=1;
    kk.d=0;
    q.push(kk);
    while(!q.empty())
    {
        qnode s=q.top();
        q.pop();
        if(d[s.id]!=s.d) continue;
        for(int i=head[s.id];i;i=e[i].nxt)
        {
            int v=e[i].v;
            if(d[v]>d[s.id]+e[i].w&&w[v]<=x)
            {
                d[v]=d[s.id]+e[i].w;
                qnode c;
                c.d=d[v];
                c.id=v;
                q.push(c);
            }
        }
    }
    return d[n]<=b;
}
int main(){
    cin >> n >> m >> b;
    long long ma=-1;
    for(long long i=1;i<=n;i++)
    {   
        scanf("%lld",&w[i]);
        ma=max(ma,w[i]);
    }
    for(long long i=1;i<=m;i++)
    {
        scanf("%lld%lld%lld",&x,&y,&z);
        if(x==y) continue;
        add(x,y,z);
        add(y,z,x);
    } 
    long long ans=-1;
    long long l=1,r=ma;
    while(l<=r)
    {
        long long mid=(l+r)/2;
        if(check(mid)) r=mid-1,ans=mid;
        else l=mid+1;
    }
    if(ans==-1) printf("AFK\n");
    printf("%lld\n",ans);
    return 0;
}

|