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

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

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

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

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

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

大概就是这样了

  1. #include<queue>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. struct tmp{
  7.   int no;
  8.   int ler;
  9.   int dis;
  10.   bool friend operator < (tmp x,tmp y)
  11.   {
  12.     return x.dis>y.dis;
  13.   }
  14. };
  15. struct pnt{
  16.   int no;
  17.   int hd;
  18.   int dis[];
  19.   bool vis[];
  20. }p[];
  21. struct ent{
  22.   int twd;
  23.   int lst;
  24.   int vls;
  25. }e[];
  26. int n,m,d;
  27. int cnt;
  28. priority_queue<tmp>Q;
  29. void ade(int f,int t,int v)
  30. {
  31.   cnt++;
  32.   e[cnt].twd=t;
  33.   e[cnt].lst=p[f].hd;
  34. p[f].hd=cnt;
  35. e[cnt].vls=v;
  36. }
  37. int main()
  38. {
  39. scanf("%d%d%d",&n,&m,&d);
  40. for(int i=;i<=n;i++)
  41. {
  42. p[i].no=i;
  43. for(int j=;j<=d;j++)
  44. {
  45. p[i].dis[j]=0x3f3f3f3f;
  46. }
  47. }
  48. p[].dis[]=;
  49. for(int i=;i<=m;i++)
  50. {
  51. int a,b,c;
  52. scanf("%d%d%d",&a,&b,&c);
  53. ade(a,b,c);
  54. ade(b,a,c);
  55. }
  56. tmp x;
  57. x.no=;
  58. x.ler=;
  59. x.dis=;
  60. Q.push(x);
  61. while(!Q.empty())
  62. {
  63. x=Q.top();
  64. Q.pop();
  65. int nw=x.no;
  66. int t=x.ler;
  67. if(x.no==n&&x.ler==d)
  68. {
  69. printf("%d\n",x.dis);
  70. return ;
  71. }
  72. if(p[nw].vis[t])continue;
  73. p[nw].vis[t]=true;
  74. for(int i=p[nw].hd;i;i=e[i].lst)
  75. {
  76. int to=e[i].twd;
  77. if(p[to].dis[t]>max(p[nw].dis[t],e[i].vls))
  78. {
  79. p[to].dis[t]=max(p[nw].dis[t],e[i].vls);
  80. x=(tmp){to,t,p[to].dis[t]};
  81. Q.push(x);
  82. }
  83. if(p[to].dis[t+]>p[nw].dis[t]&&t<d)
  84. {
  85. p[to].dis[t+]=p[nw].dis[t];
  86. x=(tmp){to,t+,p[to].dis[t+]};
  87. Q.push(x);
  88. }
  89. }
  90. }
  91. printf("-1\n");
  92. return ;
  93. }
  94.  
  95. 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. BZOJ 2242 [SDOI2011]计算器 BSGS+高速幂+EXGCD

    题意:id=2242">链接 方法: BSGS+高速幂+EXGCD 解析: BSGS- 题解同上.. 代码: #include <cmath> #include <c ...

  2. 彻底解决lazarus安装组件后烦人的编译时单元找不到的问题!

    以安装indy为例 1/下载组件包, http://www.indyproject.org/Sockets/fpc/indy-10.2.0.3.zip 2/爆开放于C:\lazarus\compone ...

  3. vue2.0-transition配合animate.css

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. PowerShell中和服务相关的命令

    New-Service https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/new-s ...

  5. html2canvas截取页面

    1.下载html2canvas.js 2.引入 3.修改html2canvas支持远程图片处理 function ImageContainer(src, cors) { this.src = src; ...

  6. zzulioj--1801--xue姐的小动物(水题)

    1801: xue姐的小动物 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 594  Solved: 168 SubmitStatusWeb Boar ...

  7. BZOJ 4236 set乱搞

    思路: 取个差 在set里面找 更新 (这个用map更好吧 但是我不会--) //By SiriusRen #include <set> #include <cstdio> # ...

  8. AndroidTouchEvent总结

    默认状态 布局文件 <?xml version="1.0" encoding="utf-8"?> <com.malinkang.touchsa ...

  9. GPU流水线

    起点: 是一个三维模型,由顶点(vertices)构成.顶点列表中的每个顶点是三维坐标系中的坐标,并带有颜色信息.顶点列表(point list)即是流水线的输入数据. 顶点处理: 定点通过三角化(t ...

  10. mysql 问题排查语句

    1.查询不是sleep或者有状态的sql select * from `information_schema`.processlist where command !='Sleep' or state ...