DongDong坐飞机

题目连接:https://ac.nowcoder.com/acm/contest/904/D

  第一次研究了一下这种题型,还是比较好理解的,因为有半价次数的限制,所以要把每一中情况都写出来,dp[现在的位置][次数]推到dp[到达的位置][次数]和dp[到达的位置][次数+1]这两种情况,然后跑一下最短路就可以了

  AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef struct W_W{
    int eend;
    int weight;
    int next;
}miao;
typedef struct W_w{
    int eend;
    int ci;
}wang;
ll minn(ll a,ll b){
    if(a<b) return a;
    return b;
}
miao x[100010];
int head[100010];
ll dp[100010][15];
int vis[100010][15];
int cnt=0;
void add(int a,int b,int c){
    x[cnt].eend=b;
    x[cnt].weight=c;
    x[cnt].next=head[a];
    head[a]=cnt++;
}
ll spfa(int start,int eend,int k){
    queue<wang> q1;
    q1.push({1,0});
    dp[1][0]=0;
    while(q1.size()){
        int dang=q1.front().eend;
        int ci=q1.front().ci;
        //printf("+++%d %d %lld \n",dang,ci,dp[dang][ci]);
        q1.pop();
        vis[dang][ci]=0;
        for(int i=head[dang];i!=-1;i=x[i].next){
            int to=x[i].eend;
            if(dp[to][ci]==-1){
                dp[to][ci]=dp[dang][ci]+x[i].weight;
                if(vis[to][ci]==0){
                    q1.push({to,ci});
                    vis[to][ci]=1;
                }
            }
            else{
                if(dp[to][ci]>dp[dang][ci]+x[i].weight){
                    dp[to][ci]=dp[dang][ci]+x[i].weight;
                    if(vis[to][ci]==0){
                        q1.push({to,ci});
                        vis[to][ci]=1;
                    }
                }
            }
            if(ci+1<=k){
                if(dp[to][ci+1]==-1){
                    dp[to][ci+1]=dp[dang][ci]+x[i].weight/2;
                    if(vis[to][ci+1]==0){
                        q1.push({to,ci+1});
                        vis[to][ci+1]=1;
                    }
                }
                else{
                    if(dp[to][ci+1]>dp[dang][ci]+x[i].weight/2){
                        dp[to][ci+1]=dp[dang][ci]+x[i].weight/2;
                        if(vis[to][ci+1]==0){
                            q1.push({to,ci+1});
                            vis[to][ci+1]=1;
                        }
                    }
                }
            }
        }
    }
//    for(int i=1;i<=eend;i++){
//        for(int j=0;j<=k;j++){
//            printf("(%d %d) %lld ",i,j,dp[i][j]);
//        }
//        printf("\n");
//    }
    ll ans=-1;
    for(int i=0;i<=k;i++){
       // printf("+++%lld %d %d %lld\n",ans,eend,i,dp[eend][i]);
        if(dp[eend][i]!=-1){
            if(ans==-1){
                ans=dp[eend][i];
            }
            else{
                ans=minn(dp[eend][i],ans);
            }
        }
    }
    return ans;
}
int main()
{
    int m,n,k;
    scanf("%d %d %d",&m,&n,&k);
    memset(head,-1,sizeof(head));
    memset(dp,-1,sizeof(dp));
    memset(vis,0,sizeof(vis));
    for(int i=0;i<n;i++){
        int a,b;
        int c;
        scanf("%d %d %d",&a,&b,&c);
        add(a,b,c);
    }
    ll ans=spfa(1,m,k);
    printf("%lld\n",ans);
    return 0;
}

原文地址:https://www.cnblogs.com/fzw1523/p/11025062.html

时间: 2024-10-10 19:50:12

DongDong坐飞机的相关文章

坐飞机的一个现象

[坐飞机的一个现象] 观察30到40这个年纪的旅客,头等舱的旅客往往是在看书,公务舱的旅客大多看杂志用笔记本办公,经济舱则看报纸电影玩游戏和聊天的较多. 在机场,贵宾厅里面的人大多在阅读,而普通候机区全都在玩手机.那么,到底是人的位置影响了行为呢,还是行为影响了位置呢? 坐飞机的一个现象,布布扣,bubuko.com

感冒时不要坐飞机 注意感冒5禁忌

感冒,这个看似常见不严重的疾病,长期间不治愈可能会导致各种炎症和其他疾病的引发病因.所以要小心对待,但其实,如果你已经感冒了,还有许多禁忌,这些方面一旦不注意,就很容易引发其他病状,或者延迟感冒的痊愈. 一.过早停药 很多人感冒的时候,流鼻涕.鼻塞和喉咙痛等明显的症状消退了之后就立刻停药,这时,感冒其实并没有完全痊愈,过早的停药会使病情反复,甚至较之前更严重. 二.过早服药 出现了感冒症状后立即服药,并不是很明智的做法.有些感冒症状可以依靠自身的抵抗力和免疫系统来消除,一发现感冒就吃药,会使免疫

基础日语口语08 坐飞机旅行

坐飞机旅行 1.切符売り場で航空券(こうくうけん)を予約します. 在售票处可预定飞机票. 2.どの会社の飛行機に乗るつもりですか. 你打算乘坐那家公司的飞机? 3.東京行きの7月4日の切符を1枚ください. 请给我一张7月4日去东京的机票. 4.今度の便はいつですか. 下一班飞机是什么时候? 5.今日は横浜行きの便がありますか. 今天有去横滨的飞机吗? 6.どのぐらい飛びますか. 要飞多长时间呢? 7.何時に離陸しますか. 几点起飞呢? 8.搭乗券(とうじょうけん)をご用意ください. 请准备好登机

王思聪王校长被限制高消费 以后居然不能坐飞机了?你知道其中奥秘吗

重磅!王思聪被约束高消费,以后不能坐飞机出行了 中新经纬客户端11月9日电(罗琨)9日,中新经纬记者从我国实行信息公开网得悉,王思聪已被上海市嘉定区人民法院发布约束消费令. 上述约束消费令显示,法院于2019年08月12日立案实行申请人曹悦申请实行上海熊猫互娱文明有限公司其他合同纠纷一案,因熊猫互娱未按实行通知书指定的期间实行收效法律文书确认的给付义务,被采取约束消费措施,约束其法定代表人.首要负责人.影响债务实行的直接责任人员.实践操控人王思聪不得实施高消费及非生活和作业必需的消费行为. 截图

疯子坐飞机问题

题目 100人坐飞机,每个人按照编号入座,但第一个人在座位中随便选一个坐下,第100人正确坐到自己坐位的概率是? 他们分别拿到了从1号到100号的座位,这些乘客会按号码顺序登机并应当对号入座 如果他们发现对应号座位被别人坐了,就会在剩下空的座位随便挑一个坐. 现在假设1号乘客疯了(其他人没疯),他会在100个座位中随便选一个座位坐下,问:第100人正确坐到自己坐位的概率是多少?(也可推广到n名乘客n个座位的情况) 解析 无法理解的,可以看下这个博文:https://blog.csdn.net/J

1957 Problem F 乌鸦坐飞机

#include <iostream> #include <algorithm> #include <cmath> #include <vector> #include <cstdio> #include <cstring> #pragma warning(disable:4996) using namespace std; int a[32][10001]; int n,q; int main() { int i,j,f,h,k,n

老板为何喜欢坐头等舱,空姐透露的“潜规则”

  坐飞机的一个现象 观察30到40这个年纪的旅客,头等舱的旅客往往是在看书,公务舱的旅客大多看杂志用笔记本办公,经济舱则看报纸电影玩游戏和聊天的较多.在机场,贵宾厅里面的人大多在阅读,而普通候机区全都在玩手机.那么,到底是人的位置影响了行为呢,还是行为影响了位置呢? 茶叶的小故事 张三一直喜欢喝20块钱的茶叶.新开茶店里每次张三去买茶叶,老板都送他半两好茶.张三将好茶攒着待客.一天闲来无事泡壶好茶,竟喝上瘾.喝完免费的好茶,张三便不愿喝20块的了.不管他买多贵的茶叶,老板总送他半两更好的.半年

飞机开始联网,互联网+航空机会来了

对于坐飞机,相信很多人心中多少会觉得有些无聊,尤其是坐国际航班或者距离较远的国内航班.美国最新一项针对2000多名成年人的民调发现,93%的人承认他们在床上使用手机,近80%的人在上厕所及43%的人在红灯停车时使用手机.今天的人们已经越来越离不开智能手机,离不开上网,如何在飞机上度过漫长的时间成为了众多经常坐飞机客户心中的痛. 日前,东方航空率先开启了上海往返纽约.洛杉矶.多伦多航线上的空中互联服务,成为国内首家将空中互联服务投入商业运营的航空公司,未来还将会在上海往返北京.广州.重庆.昆明.成

没有人会告诉您乘坐飞机时的几个事实 但是您一定要知道

飞机缩小了地球上的距离,它使人们对世界的认识也发生了改变.以往的〝天涯海角〞如今在飞机这种交通工具的面前也不过是〝数小时之遥〞的概念了,人们对飞机的利用早已司空见惯.这个会飞的庞然大物看上去既熟悉又陌生,它有您不知道的事实和您对飞机认识的误区.这篇文章旨在给您解谜和消除你长久以来的恐惧心理. 长久以来,飞机在起飞及降落时,机长都会以飞行安全为由,要求乘客关闭所有电子用品的电源,包括手机.平板电脑.笔记型电脑还有相机. 但是,据<每日邮报>的报导,从当天下午起澳航(Qantas)以及澳洲维珍航空