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

所以这道题在不删边的情况下可以使用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

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

[USACO08JAN]电话线Telephone Lines(分层图)/洛谷P1948的更多相关文章

  1. 洛谷 P1948 [USACO08JAN]电话线Telephone Lines

    P1948 [USACO08JAN]电话线Telephone Lines 题目描述 Farmer John wants to set up a telephone line at his farm. ...

  2. 洛谷 P1948 [USACO08JAN]电话线Telephone Lines 题解

    P1948 [USACO08JAN]电话线Telephone Lines 题目描述 Farmer John wants to set up a telephone line at his farm. ...

  3. 洛谷 P1948 [USACO08JAN]电话线Telephone Lines 最短路+二分答案

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 P1948 [USACO08JAN]电话线Telephone ...

  4. Luogu P1948 [USACO08JAN]电话线Telephone Lines(最短路+dp)

    P1948 [USACO08JAN]电话线Telephone Lines 题意 题目描述 Farmer John wants to set up a telephone line at his far ...

  5. 洛谷P1948 [USACO08JAN]电话线Telephone Lines

    题目描述 Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone company is u ...

  6. [USACO08JAN]电话线Telephone Lines

    多年以后,笨笨长大了,成为了电话线布置师.由于地震使得某市的电话线全部损坏,笨笨是负责接到震中市的负责人.该市周围分布着N(1<=N<=1000)根据1……n顺序编号的废弃的电话线杆,任意 ...

  7. 题解【洛谷P1948】[USACO08JAN]电话线Telephone Lines

    题面 题解 很显然,答案满足单调性. 因此,可以使用二分答案求解. 考虑\(check\)的实现. 贪心地想,免费的\(k\)对电话线一定都要用上. 每次\(check\)时将小于\(mid\)的边权 ...

  8. [USACO08JAN]电话线$Telephone \ \ Lines$(图论$+SPFA+$ 二分答案)

    #\(\mathcal{\color{red}{Description}}\) \(Link\) 给定一个图,请你求出在把其中自由选择的\(k\)条的权值都置为零的情况下,图中\(1-N\)最短路上的 ...

  9. 题解 guP1948 【[USACO08JAN]电话线Telephone Lines】

    二分+dij题目 首先读一遍题目,一定要仔细读(不要问我为什么,我就是受害者qwq 你会发现最终的费用是由最长的电话线决定的,而非电话线长度和. 至此就有了一个基本思路--枚举(二分)出可能的最长电话 ...

随机推荐

  1. Python使用Redis实现一个简单作业调度系统

    Python使用Redis实现一个简单作业调度系统 概述 Redis作为内存数据库的一个典型代表,已经在非常多应用场景中被使用,这里仅就Redis的pub/sub功能来说说如何通过此功能来实现一个简单 ...

  2. UVa 112 树求和

    题意:给定一个数字,以及一个描写叙述树的字符序列,问存不存在一条从根到某叶子结点的路径使得其和等于那个数. 难点在于怎样处理字符序列.由于字符间可能有空格.换行等. 思路:本来想着用scanf的(后发 ...

  3. 菜鸟之webservice(一) 服务端搭建

    首先说一下,为什么取名叫菜鸟之webservice,由于本人技术真的不咋滴,写博客仅仅是为了对所学知识的总结.webservice对于我来说一直都是高大上的感觉,一个java web和javase都没 ...

  4. [Chromium文档转载,第001章] Mojo Migration Guide

        For Developers‎ > ‎Design Documents‎ > ‎Mojo‎ > ‎ Mojo Migration Guide 目录 1 Summary 2 H ...

  5. win10下虚拟机安装XP系统 后无网卡的解决

    Windows 8提供了免费的虚拟机 Hyper-V, 但是在配置 Hyper-V虚拟机的时候经常遇到虚拟机无法上网,本文介绍的是: 原料   Windows 10 Hyper-V Windows X ...

  6. 破解root用户密码 -rwx权限

    破解root用户密码(本地登录) 1.光驱要放入系统光盘 2.重启os 3.修改启动菜单进入1运行级别 4.设置新密码 5.重启os linux的运行级别(默认3或5): 查看默认的运行级别 cat ...

  7. 洛谷 P3692 [PUB1]夏幻的考试

    P3692 [PUB1]夏幻的考试 题目背景 夏之幻是软件工程系的大神,学校把举办考试的任务交给她了. 题目描述 某大学软工专业要举办一场笔试,学生们要在机读答题卡上填写答案来进行答题.学校把机读卡识 ...

  8. 从Java到C++——常量的使用规则

    常量是一种标识符,它的值在执行期间恒定不变.C语言用 #define来定义常量(称为宏常量). C++ 语言除了 #define外还能够用const来定义常量(称为const常量). 一.为什么须要常 ...

  9. leetCode 27.Remove Element (删除元素) 解题思路和方法

    Remove Element Given an array and a value, remove all instances of that value in place and return th ...

  10. eclipse中编码的设置

    Windows-------->prefenerce------>General-------->Workspace