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


相关推荐

  • js数组怎么删除指定元素_给数组添加一个元素的方法

    js数组怎么删除指定元素_给数组添加一个元素的方法js数组是js部分非常重要的知识,有时我们有这么个需求js数组删除指定元素,先定义一个函数来获取删除指定元素索引值,然后用js数组删除的方法,来删除指定元素即可,就两步不难,很简单。1、JS的数组对象定义一个函数,用于查找指定的元素在数组中的位置,也就是索引值,代码如下: 1 2 3 4 5 6 Array….

    2022年9月27日
    4
  • SkeyePlayer RTSP播放器源码解析系列之H264一帧多NAL写MP4录像花屏问题解决方案

    SkeyePlayer RTSP播放器源码解析系列之H264一帧多NAL写MP4录像花屏问题解决方案接上一篇[SkeyePlayer源码解析系列之录像写MP4]之续篇,我们来讲解一下关于H264编码格式中的一帧多nal(NetworkAbstractLayer,即网络抽象层),关于H264和NAL,这里引用一段话来科普一下:【转】在H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(NAL)。其中,前者负责有效表示视频数据的内容,而后者则负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。因此我们平时的每帧数据就是一个NAL单元

    2022年10月9日
    2
  • Python 获取窗口句柄,模拟鼠标点击

    Python 获取窗口句柄,模拟鼠标点击一、效果图二、代码importwin32guiimportwin32apiimportpyautogui#frompymouseimportPyMousehwnd_title={}defget_all_hwnd(hwnd,mouse):if(win32gui.IsWindow(hwnd)andwin32gui.IsWindowEnabled(hwnd)andwin32gui.IsWindowVisible(hwnd)

    2022年7月21日
    15
  • Python – __name__==’__main__’是干啥的,以及python -m与python的区别

    Python – __name__==’__main__’是干啥的,以及python -m与python的区别转自牛人: https://www.cnblogs.com/ddzj01/p/10919210.html1.__name__=='__main__'是干啥的先看例子,准

    2022年7月5日
    32
  • Integer与int的种种比较你知道多少?[通俗易懂]

    Integer与int的种种比较你知道多少?[通俗易懂]如果面试官问Integer与int的区别:估计大多数人只会说道两点,Ingeter是int的包装类,int的初值为0,Ingeter的初值为null。但是如果面试官再问一下Integer i = 1;int ii = 1; i==ii为true还是为false?估计就有一部分人答不出来了,如果再问一下其他的,估计更多的人会头脑一片混乱。所以我对它们进行了总结,希望对大家有帮助 packa…

    2022年6月13日
    30
  • TLD(Tracking-Learning-Detection)一种目标跟踪算法

    TLD(Tracking-Learning-Detection)一种目标跟踪算法原文:http://blog.csdn.net/mysniper11/article/details/8726649视频介绍网址:http://www.cvchina.info/2011/04/05

    2022年8月5日
    8

发表回复

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

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