P2939 [USACO09FEB]改造路Revamping Trails(分层图最短路)「建议收藏」

P2939 [USACO09FEB]改造路Revamping Trails(分层图最短路)「建议收藏」P2939 [USACO09FEB]改造路Revamping Trails(分层图最短路)

大家好,又见面了,我是你们的朋友全栈君。

传送门

 

完了我好像连分层图最短路都不会了……果然还是太菜了……

具体来说就是记录一个步数表示免费了几条边,在dijkstra的时候以步数为第一关键字,距离为第二关键字。枚举边的时候分别枚举免不免费下一条边。然后其他基本就和普通的dijkstra一样了

据说这题卡spfa,特意把刚写好的spfa给改了(很懵逼为啥写spfa全T,我写挂了?)

 1 //minamoto
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<queue>
 5 #include<cstring>
 6 using namespace std;
 7 #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
 8 char buf[1<<21],*p1=buf,*p2=buf;
 9 inline int read(){
10     #define num ch-'0'
11     char ch;bool flag=0;int res;
12     while(!isdigit(ch=getc()))
13     (ch=='-')&&(flag=true);
14     for(res=num;isdigit(ch=getc());res=res*10+num);
15     (flag)&&(res=-res);
16     #undef num
17     return res;
18 }
19 const int N=10005,M=100005,K=25;
20 struct node{
21     int x,cnt,dis;
22     node(){}
23     node(int x,int cnt,int dis):x(x),cnt(cnt),dis(dis){}
24     inline bool operator <(const node b)const
25     {
   
   return cnt!=b.cnt?cnt>b.cnt:dis>b.dis;}
26 };
27 priority_queue<node> q;
28 int vis[N][K],dis[N][K];
29 int head[N],Next[M],ver[M],edge[M],tot;
30 int n,m,k;
31 inline void add(int u,int v,int e){
32     ver[++tot]=v,Next[tot]=head[u],head[u]=tot,edge[tot]=e;
33     ver[++tot]=u,Next[tot]=head[v],head[v]=tot,edge[tot]=e;
34 }
35 void dijkstra(){
36     memset(dis,0x3f,sizeof(dis));
37     memset(vis,0,sizeof(vis));
38     q.push(node(1,0,0)),dis[1][0]=0;
39     while(!q.empty()){
40         int u=q.top().x,cnt=q.top().cnt;q.pop();
41         if(vis[u][cnt]) continue;
42         vis[u][cnt]=1;
43         for(int i=head[u];i;i=Next[i]){
44             int v=ver[i];
45             if(dis[v][cnt]>dis[u][cnt]+edge[i]){
46                 dis[v][cnt]=dis[u][cnt]+edge[i];
47                 q.push(node(v,cnt,dis[v][cnt]));
48             }
49             if(cnt+1<=k&&dis[v][cnt+1]>dis[u][cnt]){
50                 dis[v][cnt+1]=dis[u][cnt];
51                 q.push(node(v,cnt+1,dis[v][cnt+1]));
52             }
53         }
54     }
55 }
56 int main(){
57 //    freopen("testdata.in","r",stdin);
58     n=read(),m=read(),k=read();
59     for(int i=1,u,v,e;i<=m;++i)
60     u=read(),v=read(),e=read(),add(u,v,e);
61     dijkstra();
62     printf("%d\n",dis[n][k]);
63     return 0;
64 }

 

转载于:https://www.cnblogs.com/bztMinamoto/p/9614693.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107322.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux下vi操作Found a swap file by the name

    linux下vi操作Found a swap file by the name

    2021年10月29日
    76
  • 串口通信中的FlowControl

    串口通信中的FlowControl串口通信中需要流控FlowControl来协调A->B传送时的数据传输速率,若A->B的数据传输速率快,B还来不及处理,则B向A发送一个信号,告诉A暂停发送,此谓流控。所谓流控即保证传输双方都能正确地发送和接收数据。流控分为硬件流控和软件流控。(1)硬件流控  DTR(第4引脚),RTS(第7引脚)计算机上的RS-232端  DSR…

    2022年6月3日
    37
  • Tensorflow2实现像素归一化与频谱归一化[通俗易懂]

    Tensorflow2实现像素归一化与频谱归一化[通俗易懂]归一化技术的改进是生成对抗网络(GenerativeAdversarialNetworks,GAN)中众多改进的一种,本文介绍常用于当前GAN中的像素归一化(Pixelnormalization,或称为像素规范化)和频谱归一化(Spectralnormalization,或称频谱规范化),在高清图片生成中,这两种归一化技术得到了广泛使用,最后使用Tensorflow2实现像素归一化和频谱归一化。

    2022年8月31日
    2
  • phpstorm激活码失效破解方法[通俗易懂]

    phpstorm激活码失效破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    110
  • redis雪崩和穿透如何解决_redis穿透和雪崩解决

    redis雪崩和穿透如何解决_redis穿透和雪崩解决redis

    2022年9月14日
    0
  • expect用法介绍

    expect用法介绍一、概念Expect是一个用来实现自动交互功能的软件套件。执行shell脚本,需要从终端得到输入时(如sshroot@192.168.1.2),Expect可以根据提示,模拟标准输入来实现交互脚本执行,使其以非交互的方式执行可以把shell和expect理解为两种不同的脚本语言,expect有独自的语法、变量二、ssh远程主机的方式2.1.简单方式,直接使用expect命令#!/bin/bash#登陆远程主机并查看主机名IP=”192.168.1.2″USERNAME=”root”P

    2022年10月22日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号