想问一下题面那句话如何理解(语文不好

P1462 通往奥格瑞玛的道路

Bianca_ @ 2018-09-07 19:00:28

我通过看题解分析懂了这道题到底想求什么 然而不知道该如何断句才能正确get到题目意思 跪求解释一下下

就是这句话:

他所经过的所有城市中最多的一次收取的费用的最小值是多少


by 夢·壹生所愛 @ 2018-09-07 19:11:58

是他经过的所有城市收费 中最大的收费 最小的一次 是多少


by Bianca_ @ 2018-09-07 19:22:05

那这篇题解中说道:

经过城市最多的一次 这次的费用最小值是多少

这句话是不对的吧挠头


by Arashi丶 @ 2018-09-07 19:36:35

显然不对啊.....

看了一眼血量的范围顿时觉得不可以dp


by 夢·壹生所愛 @ 2018-09-07 19:39:41

二分加dijkstra正解


by Bianca_ @ 2018-09-07 20:45:21

@lovelausanneforever 写了个dijkstra然而挂了 正想求助


by Bianca_ @ 2018-09-07 20:46:18

@Arashi丶 dijkstra写挂怎么破


by Bianca_ @ 2018-09-07 20:46:55

#include<iostream>
#include<cstdio>
#include<queue>
#define INF 0x7fffffff
using namespace std;
const int maxn=10100,maxm=50100;
struct node{
    int num,key;
    bool operator < (const node &a) const{
        return key>a.key;
    }
};
int n,m,b,cnt,ans;
int l,r;
int f[maxn],d[maxn],vis[maxn];
int g[maxn],nxt[maxm<<1],to[maxm<<1],c[maxm<<1];
inline void add(int u,int v,int w){
    nxt[++cnt]=g[u];
    g[u]=cnt;
    to[cnt]=v;
    c[cnt]=w;
}
inline bool judge(int maxx){
    for(int i=1;i<=n;i++){
        if(f[i]>maxx) vis[i]=1;
        else vis[i]=0;
        d[i]=INF;
    }
    d[1]=0;
    priority_queue<node>q;
    q.push((node){1,d[1]});
    while(!q.empty()){
        node x=q.top();q.pop();
        int now=x.num;
        if(vis[now]) continue;
        vis[now]=1;
        for(int o=g[now];o;o=nxt[o]){
            int v=to[o],w=c[o];
            if(d[v]>d[now]+w){
                d[v]=d[now]+w;
                q.push((node){v,d[v]});
            }
        }
    }
    if(d[n]>b) return 0;
    return 1;
}
int main(){
    scanf("%d%d%d",&n,&m,&b);
    scanf("%d",&f[1]);l=r=f[1];
    for(int i=2;i<=n;i++){
        scanf("%d",&f[i]);
        l=f[i]<l?f[i]:l;
        r=f[i]>r?f[i]:r;
    }
    for(int i=1;i<=m;i++){
        int x,y,z;
        scanf("%d%d%d",&x,&y,&z);
        add(x,y,z);add(y,x,z);
    }
    if(judge(INF)){
        printf("AFK");
        return 0;
    }
    while(l<=r){
        int mid=(l+r)>>1;
        if(judge(nid)){
            r=mid-1;
            ans=c[mid];
        }
        else l=mid+1;
    }
    printf("%d",ans);
    return 0;
}

by Arashi丶 @ 2018-09-07 20:53:24

那就写SPFA吧...这题数据好像不卡SPFA


by Arashi丶 @ 2018-09-07 20:57:07

很好奇你们最短路怎么挂的


by Bianca_ @ 2018-09-07 20:57:42

@Arashi丶 简单地说 就是过不了样例 我去试试spfa


| 下一页