洛谷 P1462 通往奥格瑞玛的道路(最短路_SPFA)

11人阅读 评论(0) 收藏 举报
分类:

传送门


题目其实是求经过城市最多的一次的费用最小值
由于要满足费用与血量两个条件,我们用血量建边,二分枚举费用跑最短路。

Code:

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
using namespace std;

const int INF=1e9;

struct node{int x,y,c,next,other;}a[100010];
int n,m,k,l,r,ans,len=0;
int b[100010],first[100010],f[100010],q[100010];
bool v[100010];

void ins(int x,int y,int c){len++;a[len].x=x;a[len].y=y;a[len].c=c;a[len].next=first[x];first[x]=len;}

bool spfa(int t)
{
    memset(f,63,sizeof(f));f[1]=0;
    memset(v,false,sizeof(v));v[1]=true;
    int st=1,ed=2;q[st]=1;
    while(st!=ed)
    {
        int x=q[st];
        for(int i=first[x];i;i=a[i].next)
        {
            int y=a[i].y;
            if(f[y]>f[x]+a[i].c)
            {
                f[y]=f[x]+a[i].c;
                if(!v[y] && b[y]<=t)
                {
                    v[y]=true;
                    q[ed++]=y;
                    if(ed>n) ed=1;
                }
            }
        }
        v[x]=false;
        st++;
        if(st>n) st=1;
    }
    if(f[n]<k) return true;
    return false;
}

int main()
{
    scanf("%d %d %d",&n,&m,&k);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&b[i]);
        r=max(r,b[i]);
    }
    l=max(b[1],b[n]);
    for(int i=1;i<=m;i++)
    {
        int x,y,c;
        scanf("%d %d %d",&x,&y,&c);
        ins(x,y,c);
        ins(y,x,c);
    }
    if(!spfa(INF)) {printf("AFK");return 0;}
    while(l<=r)
    {
        int mid=(l+r)/2;
        if(spfa(mid))
        {
            r=mid-1;
            ans=mid;
        }
        else l=mid+1;
    }
    printf("%d",ans);
}
查看评论

洛谷 通往奥格瑞玛的道路

题目背景 Background 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛...
  • LOI__DiJiang
  • LOI__DiJiang
  • 2015-10-22 15:24:10
  • 604

#洛谷 通往奥格瑞玛的道路

最短路&最大值最小 用二分答案+SPFA求解
  • EdwardKenway
  • EdwardKenway
  • 2017-05-26 19:25:18
  • 547

(洛谷 1462)通往奥格瑞玛的道路

首先,金币可以无限花。 但是血量是固定的。 so关于求金币的答案 二分,用spfa,如果使用金币最大值的最小值,满足血量条件,break 特别坑的,计算血量用longlong ...
  • sugar_free_mint
  • sugar_free_mint
  • 2018-01-13 15:22:49
  • 48

洛谷 1462 通往奥格瑞玛的道路

题目背景 Background在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛。题...
  • Loi_imcy
  • Loi_imcy
  • 2015-10-25 17:05:24
  • 907

洛谷 1462 通往奥格瑞玛的道路

题目背景在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量有一天他醒来后发现自己居然到了联盟的主城暴风城在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛题目描述在艾泽拉斯,有n个城市...
  • Hawo11
  • Hawo11
  • 2017-11-03 17:27:40
  • 144

洛谷 P1462 通往奥格瑞玛的道路

spfa+二分
  • Rlt1296
  • Rlt1296
  • 2016-08-21 22:34:50
  • 415

洛谷 P1462通往奥格瑞玛的道路

题目背景 Background 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛...
  • wwwasdirine
  • wwwasdirine
  • 2015-10-24 12:41:39
  • 630

洛谷P1462 通往奥格瑞玛的道路

通往奥格瑞玛的道路 题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃...
  • zhanghaoxian1
  • zhanghaoxian1
  • 2017-03-08 21:34:11
  • 111

洛谷 P1462 通往奥格瑞玛的道路

P1462 通往奥格瑞玛的道路 题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自...
  • qq_35776409
  • qq_35776409
  • 2017-03-17 16:22:48
  • 203

[洛谷P1462]通往奥格瑞玛的道路

描述 在艾泽拉斯,有n个城市。编号为1,2,3,…,n。 城市之间有m条双向的公路,连接着两个城市,从某个城市到另一个城市,会遭到联盟的攻击,进而损失一定的血量。 没经过一个城市,都会被收取一定...
  • dxyinme
  • dxyinme
  • 2016-08-17 19:28:12
  • 340
    个人资料
    持之以恒
    等级:
    访问量: 734
    积分: 374
    排名: 20万+
    文章存档
    最新评论