题目链接:点击查看

题目大意:在郊区有N座通信基站,P条双向电缆,第i条电缆连接基站Ai和Bi。特别的,1号基站是通信公司的总站,N号基站位于一座农场中。现在,农场主希望对通信线路进行升级,其中升级第i条电缆需要花费Li

电话公司正在举行优惠活动,农场主可以指定一条从1号基站到N号基站的路径,并指定路径上不超过K条电缆,由电话公司免费提供升级服务,农场主只需要支付在该路径上剩余的电缆中,升级价格最贵的那条电缆的花费即可,求至少用多少钱能完成升级

题目分析:因为是要求最短路中权值最大值的最小值,不难让人想到二分,但这个题目我更想练一下分层图最短路的模板,大概就是spfa迭代更新dp的状态,dp[i][j]代表起点到点i,一路上免费了j个电缆后的答案,因为免费k条是最优的,所以答案就是d[n][k]了

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e3+100;//顶点数 const int M=2e5+100;//边数 struct Edge
{int to,w,next;
}edge[M];int head[N],d[N][N],cnt;//链式前向星 d[i][j]:从st点到i点,途中已经免费了j条后,路上边权的最大值 bool vis[N][N];//vis[i][j]:与d[i][j]同步记录当前(i,j)状态是否遍历 void addedge(int u,int v,int w)
{edge[cnt].to=v;edge[cnt].w=w;edge[cnt].next=head[u];head[u]=cnt++;
}struct Node
{int to,c,w;//c表示免费了几条边 Node(int TO,int W,int C){to=TO;w=W;c=C;}bool operator<(const Node& a)const{return w>a.w;}
};void spfa(int st,int k)//k:免费了k条路
{memset(vis,false,sizeof(vis));memset(d,-1,sizeof(d));d[st][0]=0;priority_queue<Node>q;q.push(Node(st,0,0));//点,权,免费的c while(q.size()){Node cur=q.top();q.pop();int u=cur.to;int c=cur.c;if(vis[u][c])continue;vis[u][c]=true;for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].to;int w=edge[i].w;if(!vis[v][c]&&(d[v][c]==-1||d[v][c]>max(d[u][c],w))){d[v][c]=max(d[u][c],w);q.push(Node(v,d[v][c],c));}if(c<k){if(!vis[v][c+1]&&(d[v][c+1]==-1||d[v][c+1]>d[u][c])){d[v][c+1]=d[u][c];q.push(Node(v,d[v][c+1],c+1));}}}}
}void init()
{memset(head,-1,sizeof(head));cnt=0;
}int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);int n,m,k;while(scanf("%d%d%d",&n,&m,&k)!=EOF){init();while(m--){int u,v,w;scanf("%d%d%d",&u,&v,&w);addedge(u,v,w);addedge(v,u,w);}spfa(1,k);printf("%d\n",d[n][k]);}return 0;
}

POJ - 3662 Telephone Lines(分层图最短路)相关推荐

  1. poj 3662 Telephone Lines spfa算法灵活运用

    意甲冠军: 到n节点无向图,它要求从一个线1至n路径.你可以让他们在k无条,的最大值.如今要求花费的最小值. 思路: 这道题能够首先想到二分枚举路径上的最大值,我认为用spfa更简洁一些.spfa的本 ...

  2. poj 3662 Telephone Lines(好题!!!二分搜索+dijkstra)

    Description Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone compa ...

  3. 图论 ---- E. Minimum Path(分层图最短路 用分层图对边权操作进行选择)

    题目链接 题目大意: 两点间最短路的定义变成:所有的边之和−max+min所有的边之和-max+min所有的边之和−max+min 解题思路: 这里很明显就是变成了最短路的时时候就是把路径上边权最小值 ...

  4. BZOJ2662[BeiJing wc2012]冻结——分层图最短路

    题目描述 "我要成为魔法少女!"      "那么,以灵魂为代价,你希望得到什么?"  "我要将有关魔法和奇迹的一切,封印于卡片之中„„"  ...

  5. 洛谷 - P4009 汽车加油行驶问题(分层图最短路/最小费用最大流)

    题目链接:点击查看 题目大意:给出一个n*n的矩阵表示道路,途中有一些加油站,现在要从点(1,1)到达点(n,n),问最小花费,其中的一些规则如下: 汽车只能沿着网格边行驶,装满油后可以行驶K条边,出 ...

  6. codeforces1473 E.Minimum Path(分层图最短路)

    E - Minimum Path 分层图最短路 第一个分层图 第0层就是按照题中给的点连边,从第0层到第1层我们连一条边权是0的边,从第1层到第2层连一条边权是原先边权2倍的边,当然第1层以及第2层之 ...

  7. 【bzoj2834】回家的路 分层图最短路

    题目描述 输入 输出 样例输入 2 1 1 2 1 1 2 2 样例输出 5 题解 分层图最短路 dis[i][0]表示到i为横向时起点到i的最短路,dis[i][1]表示到i为纵向时起点到i的最短路 ...

  8. 【算法练习】CodeVs1391 伊吹萃香(分层图最短路)

    题意 在幻想乡,伊吹萃香是能够控制物体密度的鬼王.因为能够控制密度,所以萃香能够制造白洞和黑洞,并可以随时改变它们.某一天萃香闲着无聊,在妖怪之山上设置了一些白洞或黑洞,由于引力的影响,给妖怪们带来了 ...

  9. Loj#6223 Luogu P4009 汽车加油行驶 分层图最短路

    这是本蒟蒻博客的第一篇文章,不规范之处敬请各位大佬指正和谅解orz Loj#6223+Luogu P4009 文章目录 前言 一.建模 二.代码实现 1.节点在图中的编号(分层图的存储) 2.建边 对 ...

最新文章

  1. h5软盘占位把定位内容往上顶_安徽省计算机一级考试选择题、操作题、打字题库2012年上半年版.xls...
  2. 以太网Ethernet解码概述
  3. Tomcat的安装配置与JavaWeb入门教程
  4. [FlareOn5]Ultimate Minesweeper(dnSpy新玩法)
  5. C++阶段01笔记汇总【C++软件安装、C++初识、数据类型、运算符、程序流程结构、数组、函数、指针、结构体】
  6. 在鹅厂做了14年开发
  7. codeforces 884E Binary Matrix 并查集,滚动数组
  8. 【CF913G】Power Substring 数论+原根
  9. python不会怎么办_怕你还不会Python函数,我特意为你整理了一篇博客
  10. firefox关闭窗口问题
  11. missing 1 required positional argument: ‘on_delete‘报错解决方案
  12. 弱网环境搭建方案选型
  13. pytest文档24-fixture的作用范围(scope)
  14. C盘pc的Android文件夹,清理系统盘C盘的无用文件
  15. Eclipse设置护眼豆沙绿
  16. Android View绘制流程
  17. 黄金分割法 ( 三分法 )
  18. 什么是大小端,如何写程序判断大小端?
  19. win7 防火墙开启ping
  20. python 获取csv的列数_《极限挑战》弹幕及评论情感分析(Python)

热门文章

  1. MySQL高级 - 日志 - 慢查询日志
  2. Nacos配置管理-多环境配置共享
  3. RabbitMQ工作队列
  4. 优化器是怎么得到执行计划的?
  5. JAX-RS协议说明
  6. OAauth2.0包括以下角
  7. 如果传输的文件过大怎么办
  8. SasSHRM中基于shiro的认证授权:系统微服务配置shiro
  9. web服务器软件_概述
  10. 江苏自学考试计算机网络专业,速看,江苏自考本科计算机网络专业介绍