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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dism失败 ox800f0818_Win 10 DISM 一直失败,错误: 0x8000ffff – Microsoft Community[通俗易懂]

    dism失败 ox800f0818_Win 10 DISM 一直失败,错误: 0x8000ffff – Microsoft Community[通俗易懂]你好!了解到您的问题。在使用RestoreHealth命令时是需要在检测出系统出现问题且映像文件可修复的情况下才能使用;Dism/Online/Cleanup-Image/ScanHealth这条命令将扫描全部系统文件并和官方系统文件对比,扫描计算机中的不一致情况。Dism/Online/Cleanup-Image/CheckHealth这条命令必须在前一条命令执行完以后,发现系统文件…

    2022年9月24日
  • java对象转json字符串方法_oracle clob转字符串

    java对象转json字符串方法_oracle clob转字符串曾今遇到一个问题,需要将JavaBean转换为Json字符串,用fastjson可以很方便的做到。但是得到的结果是JavaBean成员变量的首字母编程了小写。经过查找资料,原来我们可以使用fastjson的@JsonField注解来自定义json中key的值,这样看来还是很方便的。

    2022年9月22日
  • clone fail smartgit_SmartGit

    clone fail smartgit_SmartGit安装选择非商业的第三个设置username和邮箱简单的配置ignore忽略一些不需要上传的配置文件,需要配置.gitignore文件.可以在github上搜索到所有编程语言需要忽略的配置文件ignore列表,从列表中找到对应的OC语言需要忽略的文件就可以了。修改ignore文件删除某一类文件的命令在SVN版本控制的project中,drag文件到git版本控制下的project中时…

    2022年10月21日
  • 基于xxx的系统实现「建议收藏」

    基于xxx的系统实现「建议收藏」帮助解答任何系统问题1.成品:看最下面2.基于强化学习的Tic-Tac-To实现3.基于文本的关键词打标4.基于自然语言处理的情感分析系统5.基于深度学习的语音识别系统6.基于深度学习的人脸识别系统7.随机森林的多分类问题研究8.回归算法预测系统9.决策树算法的分类系统10.基于Python的lstm情感分析11.基于Python的金融分析系统12.基于Python的电商评论爬虫系统13.基于Flask的校园课程管理系统设计与实现14.基于Flask的人脸识别企业系统15.vb

    2022年9月16日
  • python查微信好友是否删除自己_微信 用脚本查看是否被微信好友删除 不用群发用Python脚本查微信被哪些好友删除…「建议收藏」

    python查微信好友是否删除自己_微信 用脚本查看是否被微信好友删除 不用群发用Python脚本查微信被哪些好友删除…「建议收藏」python3为什么不加锁也数据同步不安全,在多线程下并非一定同步。网上有的是例子可以证明,自己搜个试试看就知道了。用脚本快速查看自己被多少微信好友删除找自己删除的微信好友方法:尽管,生命中无数次的回头,也终究错过很多的故事,遗憾过,后悔过,遗憾了红尘中走过却没有带走些什么东西,后悔了一路走来却还是放下了一些东西。是的!一切就好像梦一场,但是梦醒后又想,好像曾经来过!第二种简单方法:如果该好友没…

    2022年6月3日
  • Vue项目实战05:18n实现多语言自动切换-浏览器语言设置「建议收藏」

    Vue项目实战05:18n实现多语言自动切换-浏览器语言设置「建议收藏」什么是vue-i18ni18n是Internationalization这个英文的简写,即国际化的意思,vue-i18n是一款针对于vue开发的国际化插件,让项目支持多语言切换,以适应不同地区用户的需求。安装vue-i18n直接在项目中执行安装命令:npminstallvue-i18n–save​全局引入vue-i18n在项目中引入vue-i18n,实例化vue-i18n将需要加载的语言包通过require导入,这里看个人需求我只需要中英日文,所以引入zh-CN.js和en-US.j

    2022年6月4日

发表回复

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

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