这道题其实是分层图,但和裸的分层图不太一样。因为它只要求路径总权值为路径上最大一条路径的权值,但仔细考虑,这同时也满足一个贪心的性质,那就是当你每次用路径总权值小的方案来更新,那么可以保证新的路径权值尽量小。

所以这道题在不删边的情况下可以使用Dij来跑,而删边权的情况就是分层图。

所以就拿分层图来搞好了^_^。

由于这个数据p和k都比较大,所以直接建k+1层图是要爆的,而k+1层图边都一样,我们就用dis[层数(0-k)]来表示。

具体的就是每次Dij转移是要分两种情况:

1.在原层跑,也就是说,在这层中用Dij
2.若下一层边的另一端不够优秀,就用这一层来直接更新,当然就是把这一端的点的解直接复制

大概就是这样了

 #include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct tmp{
  int no;
  int ler;
  int dis;
  bool friend operator < (tmp x,tmp y)
  {
    return x.dis>y.dis;
  }
};
struct pnt{
  int no;
  int hd;
  int dis[];
  bool vis[];
}p[];
struct ent{
  int twd;
  int lst;
  int vls;
}e[];
int n,m,d;
int cnt;
priority_queue<tmp>Q;
void ade(int f,int t,int v)
{
  cnt++;
  e[cnt].twd=t;
  e[cnt].lst=p[f].hd;
p[f].hd=cnt;
e[cnt].vls=v;
}
int main()
{
scanf("%d%d%d",&n,&m,&d);
for(int i=;i<=n;i++)
{
p[i].no=i;
for(int j=;j<=d;j++)
{
p[i].dis[j]=0x3f3f3f3f;
}
}
p[].dis[]=;
for(int i=;i<=m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
ade(a,b,c);
ade(b,a,c);
}
tmp x;
x.no=;
x.ler=;
x.dis=;
Q.push(x);
while(!Q.empty())
{
x=Q.top();
Q.pop();
int nw=x.no;
int t=x.ler;
if(x.no==n&&x.ler==d)
{
printf("%d\n",x.dis);
return ;
}
if(p[nw].vis[t])continue;
p[nw].vis[t]=true;
for(int i=p[nw].hd;i;i=e[i].lst)
{
int to=e[i].twd;
if(p[to].dis[t]>max(p[nw].dis[t],e[i].vls))
{
p[to].dis[t]=max(p[nw].dis[t],e[i].vls);
x=(tmp){to,t,p[to].dis[t]};
Q.push(x);
}
if(p[to].dis[t+]>p[nw].dis[t]&&t<d)
{
p[to].dis[t+]=p[nw].dis[t];
x=(tmp){to,t+,p[to].dis[t+]};
Q.push(x);
}
}
}
printf("-1\n");
return ;
} telephone line

其实,这道题还可以二分来搞,我就不赘述了主要是我太懒了

最新文章

  1. C++ STL编程轻松入门基础
  2. Spark菜鸟学习营Day2 分布式系统需求分析
  3. 约瑟夫问题(Josephus Problem)的两种快速递归算法
  4. 【iOS开发】添加子控件方式(懒加载,GCC)
  5. 思迅/泰格/科脉/收银软件/商超软件数据库修复解决断电造成损坏的mdb\dat文件SQL数据库 置疑 修复 恢复
  6. Flutter 即学即用系列博客——10 混淆
  7. Httpclient代码
  8. awesome资源包
  9. Vertica系列: 表的分段和分区
  10. 【第一部分】01Leetcode刷题
  11. every day a practice —— morning(4)
  12. centos 7 下 cobbler 安装
  13. 启动zookeeper时出现的问题
  14. SUST OJ 1642: 绝地求生—死亡顺序
  15. H5学习笔记1
  16. Windows下安装Redis服务,修改查看密码,修改端口,常用命令
  17. 【MFC】VS2017新建完MFC后,没有界面,只有代码
  18. 大白话解释IP多播
  19. 将GDB中的输出定向到文件
  20. 8. String to Integer

热门文章

  1. Android资源之图像资源(状态图像资源)
  2. Lesson 2 Building your first web page: Part 1
  3. Entity Framework之Model First开发方式
  4. @Not - Empty-Null-Blank
  5. 深入Vue的响应式原理
  6. c#同步上下文SynchronizationContext学习笔记
  7. Scrapy中将数据保存至数据库
  8. Copying GC (Part one)
  9. Linux Cgroups
  10. CSUOJ 1532 JuQueen