只过了1 4 7 11个测试点只有37分

P1462 通往奥格瑞玛的道路

Eternity_YH @ 2022-02-26 16:02:20

求助

#include<queue>
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define PII pair<int,int>
#define x first
#define y second
using namespace std;
int n,m,b;
int f[100005];
int h[100005],e[100005],ne[100005],w[100005],idx;
int dis[100005];
bool v[100005];
void add(int a,int b,int c)
{
    e[idx]=b,w[idx]=c,ne[idx]=h[idx],h[a]=idx++;
}
int check(int mid)
{
    for(int i=1;i<=n;i++)dis[i]=1e9;
    memset(v,0,sizeof v);
    priority_queue<PII,vector<PII>,greater<PII>> q;
    q.push({0,1});
    dis[1]=0;
    while(q.size())
    {
        PII t=q.top();
        q.pop();

        int ver=t.y;
        int distance=t.x;

        if(v[ver])continue;
        v[ver]=1;

        for(int i=h[ver];i!=-1;i=ne[i])
        {
            int j=e[i];
            if(dis[j]>dis[ver]+w[i]&&f[j]<=mid)
            {
                dis[j]=dis[ver]+w[i];
                q.push({dis[j],j});
            }
        }
    }
    if(dis[n]<b)
    return 1;
    else
    return 0;   
}
int main()
{
    cin>>n>>m>>b;
    for(int i=1;i<=n;i++)
    {
        cin>>f[i];
    }

    memset(h,-1,sizeof h);

    for(int i=1;i<=m;i++)
    {
        int a,b,c;
        cin>>a>>b>>c;
        add(a,b,c);
        add(b,a,c);
    }

    int l=1,r=1e9+1;
    while(l<r)
    {
        int mid=(l+r)>>1;
        check(mid);
        if(dis[n]<b)
        {
            r=mid;
        }
        else
        {
            l=mid+1;
        }       
    }
    check(l);
    if(dis[n]>b)cout<<"AFK"<<endl;
    else
    cout<<l<<endl;
} 

实在不知道哪里错了


|