震惊!!!

P1462 通往奥格瑞玛的道路

TAIshine @ 2019-11-14 20:14:48

又是一个大力的夜晚,我的大力键盘被我大力敲打, 终于大力写完了这道大力题。

当我大力提交的时候,眼前大力地出现了一个WA,是第八个大力点。

在我无力地反复提交下,无力的情况没有一点大力的好转。

无奈,我无力地找到了第一篇题解,并提交了上去。

震惊!!!

居然同样WA了第八个点。

代码如下,蒟蒻在线大力等,急!

#include<iostream>
#include<cstring>
#include<queue>
#include<algorithm> 
#define N 20010
#define M 50005
#define V 0x7fffffff-1000000001
#define ll long long 
using namespace std;
struct edge{ll ne,to,dis;}e[4*M];
ll mx,mn=V,ans=V;
ll a,b,c,p,n,m,mid,Hp,u;
ll good[N*2],h[3*M],flag[N*2],pan[N*2],ts[N*2],t[N*2];
priority_queue<int,vector<int >,greater<int > >que;
void qxx(ll from,ll to,ll dis){
    e[++p].ne=h[from];
    e[p].to=to;
    e[p].dis=dis;
    h[from]=p;
}
int pass(ll biao ){
    if(biao<good[1]||biao<good[n])return 0;
    for(int i=1;i<=n;i++){if(good[i]>biao)pan[i]=1;t[i]=V;}
    t[1]=0;
    que.push(1);
    while(que.empty()==0){
        u=que.top();
        que.pop();
        if(pan[u]==1)continue;
        pan[u]=1;
        for(int i=h[u];i;i=e[i].ne){
            if(t[e[i].to]>t[u]+e[i].dis)
            {t[e[i].to]=t[u]+e[i].dis;
             que.push(e[i].to);}
        }
    }
    if(t[n]>Hp)return 0;
    else return 1;
}

int main()
{
    cin>>n>>m>>Hp;
    for(int i=1;i<=n;i++)cin>>good[i],ts[i]=good[i];    
    for(int i=1;i<=m;i++){cin>>a>>b>>c;qxx(a,b,c);qxx(b,a,c);}
    sort(ts+1,ts+1+n);
    if(pass(ts[n])==0){cout<<"AFK";return 0;}
    memset(pan,0,sizeof(pan));
    mn=1; mx=n;
    while(mn<mx){
        int mid=(mn+mx)>>1;
        if(pass(ts[mid]))mx=mid;
        else mn=mid+1;
        memset(pan,0,sizeof(pan)); 
    }
    cout<<ts[mn];       
    return 0;
}

by George1123 @ 2019-11-14 20:16:03

@TAIshine 试试我的那篇题解


by 江山_远方 @ 2019-11-14 20:26:25

大力好评


|