[USACO08JAN]电话线$Telephone \ \ Lines$(图论$+SPFA+$ 二分答案)
#\(\mathcal{\color{red}{Description}}\)
给定一个图,请你求出在把其中自由选择的\(k\)条的权值都置为零的情况下,图中\(1-N\)最短路上的最大边权的最小值。
#\(\mathcal{\color{red}{Solution}}\)
哇这个题真是吊打我的智商啊…
首先我们看题目中给的限制条件,限制我们不能直接\(sort\)一遍的条件就是我们要找的是最短路上的边权最大值最小限制了我们把一些边的权值置为零之后,图上的最短路。而这个最短路的情况比较复杂,因为你不可以静态删边,\(DP\)的话应该可以,但是\(DP\)起来不容易定义状态并且转移较麻烦其实就是我不会。所以我们考虑把每种合法的状态都枚举一遍,得出\(min\)。但是比较显然的是,由于结果具有某种意义上的单调性,所以我们可以二分。
那怎么二分呢?我们可以考虑二分一条扫描线,把大于这条边的边权都设成\(1\),小于的都设成\(0\)。如果\(SPFA\)出来的结果\(\leq K\)的话,那这就是一种合法的方案;否则不合法。
然后就二分就行了惹~
// luogu-judger-enable-o2
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#define to(k) e[k].to
using namespace std ;
const int MAXN = 12050 ;
struct edge{
int to, next, v ;
}e[MAXN << 1] ;
queue<int> q ;
int head[MAXN << 1], cnt, dist[MAXN], i, k, ct ;
int l, r, mid, a, b, c, N, M, K, vis[MAXN], now ;
inline void init(){
memset(dist, 0x3f, sizeof(dist)), memset(vis, 0, sizeof(vis)) ;
queue<int> emt ; swap(q, emt), q.push(1), vis[1] = 1, dist[1] = 0 ;
}
inline bool check(int x){
init() ;
while(!q.empty()){
now = q.front(), q.pop(), vis[now] = 0 ;
for(k = head[now]; k ; k = e[k].next){
ct = (e[k].v > x ? 1 : 0) ;
if(dist[to(k)] > dist[now] + ct){
dist[to(k)] = dist[now] + ct ;
if(!vis[to(k)]){
vis[to(k)] = 1 ;
q.push(to(k)) ;
}
}
}
}
if(dist[N] > K) return 0 ; return 1 ;
}
inline void add(int u, int v, int w){
e[++cnt].to = v, e[cnt].v = w ;
e[cnt].next = head[u], head[u] = cnt ;
}
int main(){
cin >> N >> M >> K ;
for(i = 1; i <= M; i ++){
cin >> a >> b >> c ;
add(a, b, c), add(b, a, c) ;
}l = 0, r = 1000000 ;
while(l < r){
mid = (l + r) >> 1 ;
if(check(mid)) r = mid ;
else l = mid + 1 ;
}
if(l == 1000000) cout << -1 ;
else cout << l ;
}
幕后花絮:这道题由于我忘了判\(-1 +\)空间开小导致挂了好多次……真是\(GG\)
[USACO08JAN]电话线$Telephone \ \ Lines$(图论$+SPFA+$ 二分答案)的更多相关文章
- 洛谷 P1948 [USACO08JAN]电话线Telephone Lines 最短路+二分答案
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 P1948 [USACO08JAN]电话线Telephone ...
- 洛谷 P1948 [USACO08JAN]电话线Telephone Lines
P1948 [USACO08JAN]电话线Telephone Lines 题目描述 Farmer John wants to set up a telephone line at his farm. ...
- 洛谷P1948 [USACO08JAN]电话线Telephone Lines
题目描述 Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone company is u ...
- [USACO08JAN]电话线Telephone Lines
多年以后,笨笨长大了,成为了电话线布置师.由于地震使得某市的电话线全部损坏,笨笨是负责接到震中市的负责人.该市周围分布着N(1<=N<=1000)根据1……n顺序编号的废弃的电话线杆,任意 ...
- bzoj 1614 Telephone Lines架设电话线 - 二分答案 - 最短路
Description Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用. FJ的农场周围分布着N(1 <= N ...
- 题解【洛谷P1948】[USACO08JAN]电话线Telephone Lines
题面 题解 很显然,答案满足单调性. 因此,可以使用二分答案求解. 考虑\(check\)的实现. 贪心地想,免费的\(k\)对电话线一定都要用上. 每次\(check\)时将小于\(mid\)的边权 ...
- P1948 [USACO08JAN]电话线Telephone Lines
传送门 思路: 二分+最短路径:可以将长度小于等于 mid 的边视为长度为 0 的边,大于 mid 的边视为长度为 1 的边,最后用 dijkstra 检查 d [ n ] 是否小于等于 k 即可. ...
- [Usaco2007 Jan]Telephone Lines架设电话线[二分答案+最短路思想]
Description Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用. FJ的农场周围分布着N(1 <= N ...
- P1948 [USACO08JAN]电话线Telephone Lines(二分答案+最短路)
思路 考虑题目要求求出最小的第k+1大的边权,想到二分答案 然后二分第k+1大的边权wx 把所有边权<=wx的边权变为0,边权>wx的边权变为0,找出最短路之后,如果dis[T]<= ...
- 【SPFA+二分答案】BZOJ1614- [Usaco2007 Jan]Telephone Lines架设电话线
沉迷于刷水 以前的那个二分写法过不了QAQ 换了一种好像大家都比较常用的二分.原因还不是很清楚. [题目大意] 给出一张图,可以将其中k条边的边权减为0,求1到n的路径中最长边的最小值. [思路] 二 ...
随机推荐
- JSP简单实现统计网页访问次数
JSP简单实现统计网页访问次数 需求:统计网页的访问次数 核心思想:利用application对象,将访问次数的信息放入application对象中,每次访问就+1.这里利用了application对 ...
- 1083 Cantor表
题目描述 Description 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 2/ ...
- drupal7 获取当前使用的主题的名称
直接引用全局变量就行: 参考: 代码测试: global $theme, $theme_key; echo $theme; echo '<br>'; echo $theme_key; 结果 ...
- ES6 模块化与 CommonJS 模块化
ES6 模块化 import命令用于输入其他模块提供的功能;export命令用于规定模块的对外接口. export 可以有多个,export default 仅有一个 a.js 模块a文件 导出多个方 ...
- 关于修改bug的思考
作者:朱金灿 来源:http://blog.csdn.net/clever101 有软件就有bug,这意味着软件研发不仅仅是新功能开发,更要拿出相当一部分精力去修改bug.但基本很多软件开发者并 ...
- 安装使用jupyter
介绍 jupyter是IPython剥离出来成为一个语言无关的独立软件包. jupyter已经支持50多种语言的内核,包括Lisp.R.F#.Perl.Ruby.Scala等.事实上即使IPython ...
- 搭建hustoj
环境:centos6.5 + LAMP环境 LAMP环境的搭建可以参考下面这篇文章 http://www.cnblogs.com/yoke/p/7257184.html 搭建完LAMP环境之后可以按照 ...
- SSM 框架-06-详细整合教程(IDEA版)(Spring+SpringMVC+MyBatis)
SSM 框架-06-详细整合教程(IDEA版)(Spring+SpringMVC+MyBatis) SSM(Spring.Spring MVC和Mybatis)如果你使用的是 Eclipse,请查看: ...
- 深入理解HashMap和concurrentHashMap
原文链接:https://segmentfault.com/a/1190000015726870 前言 Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据. 本篇 ...
- 已经不再使用的表为什么数据页还在SQLServer的内存缓存中
1. 问题发现 在学习内存调优时,使用如下代码,查询目前内存缓冲区中生产数据库的每个对象缓存页计数 SELECT count(*)AS cached_pages_count ,name ,index_ ...