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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • ResNet解析_restnet

    ResNet解析_restnetResNet在2015年被提出,在ImageNet比赛classification任务上获得第一名,因为它“简单与实用”并存,之后很多方法都建立在ResNet50或者ResNet101的基础上完成的,检测,分割,识别等领域都纷纷使用ResNet,Alphazero也使用了ResNet,所以可见ResNet确实很好用。下面我们从实用的角度去看看ResNet。1.ResNet意义随着…

  • 数据库三范式

    数据库三范式

  • 面试官都震惊,你这网络基础可以啊![通俗易懂]

    面试官都震惊,你这网络基础可以啊![通俗易懂]目录网络1.对网络的基础认识<1>.组网方式<2>.OSI七层模型<3>.TCP/IP五层(四层模型)<4>.对封装分用的理解2.网络数据传输<1>局域网(1)认识IP和MAC(2)网络数据传输的特性(3)网络数据传输流程1)网络互联的方式2).局域网交换机组网的方式3)局域网交换机+路由器组网的方式<2>广域网传输流程3.UDP和TCP<1>UDP协议<2>TCP协议(可靠的传输协议)(1)TCP相关概念(2)

  • 从零开始搭建服务器,拥有一个属于自己的网站

    从零开始搭建服务器,拥有一个属于自己的网站创建一个属于自己,任何人都可以访问的网站(最最最详细的步骤)这篇文章将从购买服务器一直到最后网站完成备案,详细说明整个过程,就算是不懂编程的人照样可以拥有属于自己的服务器和网站必备条件:1:电脑一台2:网络3:money(30块钱)4:身份证一:首先选择阿里云、腾讯云或者其他任何一家的云,租一台ECS服务器。不管是哪一家的云服务器,基本上都有十块钱一个月的服务器,阿里云12-24岁自动认证学生,可以享受十块钱一个月的价格,这里就以阿里云为例。(注意:选择哪一家的服务器最好就使用哪一家的域名注

  • perl正则表达式匹配后的各种变量

    perl正则表达式匹配后的各种变量[root@rwsoda203db1perl_tidb]#catp.pl#!/usr/bin/perlusestrict”subs”;usestrict;usev5.16;my$n=3;my$str=”first.<EM>PARENT</EM>LAST”;$str=~m#(<.*?>)(.*?)(</….

  • mysql varchar列转成integer然后获取最大值。[通俗易懂]

    mysql varchar列转成integer然后获取最大值。[通俗易懂]https://blog.csdn.net/c_henjinxing521/article/details/51788963上面的大神写的办法可以。selectMAX(CAST(userNoasSIGNEDINTEGER))fromuserInfo;或者selectMAX(CAST(userNoasUNSIGNEDINTEGER))fromus…

发表回复

您的电子邮箱地址不会被公开。

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