P1948 [USACO08JAN]Telephone Lines S
题意描述
在无向图中求一条从 \(1\) 到 \(N\) 的路径,使得路径上第 \(K+1\) 大的边权最小。
等等,最大的最小...如此熟悉的字眼,难道是 二分答案。
下面进入正题。
算法分析
没错就是酱紫,二分这个第 \(K+1\) 大的边权的值,设这条边的边权为 \(val\) 那么:
\begin{array}{rcl}
0 & & {edge[i] \leq val}\\
1 & & {edge[i] > val}\
\end{array} \right. \]
然后就跑一遍最短路(01 图的最短路可以用双端队列优化来跑)。
\begin{array}{rcl}
[l,val] & & {dis[N] \leq k}\\
[val+1,r] & & {dis[N] > k}\
\end{array} \right. \]
这样就确定了寻找范围,然后就结束了...
记得初始化时 \(l=-1\),避免误解情况误判。
代码实现
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<cstring>
#include<deque>
#define N 1010
#define M 10010
using namespace std;
int n,p,k,head[N],cnt=0,dis[N];
bool vis[N];
struct Edge{
int next,to,val;
}edge[M<<1];
deque<int>q;
int read(){
int x=0,f=1;char c=getchar();
while(c<'0' || c>'9') f=(c=='-')?-1:1,c=getchar();
while(c>='0' && c<='9') x=x*10+c-48,c=getchar();
return x*f;
}
void addedge(int x,int y,int z){
cnt++;
edge[cnt].next=head[x];
edge[cnt].to=y;
edge[cnt].val=z;
head[x]=cnt;
return;
}
bool chck(int x){
while(!q.empty()) q.pop_front();
memset(vis,false,sizeof(vis));
memset(dis,0,sizeof(dis));
dis[1]=0;vis[1]=true;
q.push_front(1);
while(!q.empty()){
int now=q.front();
q.pop_front();
for(int i=head[now];i;i=edge[i].next){
int y=edge[i].to;
int z=edge[i].val<=x?0:1;
if(!vis[y] || dis[y]>=dis[now]+1)
if(!z){
dis[y]=dis[now];
q.push_front(y);
vis[y]=true;
}
else{
dis[y]=dis[now]+1;
q.push_back(y);
vis[y]=true;
}
}
}
if(dis[n]<=k) return true;
return false;
}
int main(){
n=read();p=read();k=read();
int mx=0,x,y,z;
for(int i=1;i<=p;i++){
x=read();y=read();z=read();
addedge(x,y,z);
addedge(y,x,z);
mx=max(mx,z);
}
int l=-1,r=mx,mid;
while(l<r){
int mid=(l+r)>>1;
if(chck(mid)) r=mid;
else l=mid+1;
}
printf("%d\n",l);
return 0;
}
还是很简单,所以并没有总结。
完结撒花。
P1948 [USACO08JAN]Telephone Lines S的更多相关文章
- Luogu P1948 [USACO08JAN]Telephone Lines
题目 两眼题 二分一个\(lim\),然后跑最短路(边权\(\le lim\)的边长度为\(0\),\(>lim\)的长度为\(1\)),然后判断\(dis_{1,n}\le k\). #inc ...
- [USACO08JAN]Telephone Lines
嘟嘟嘟 题意概括一下,就是在无向图上求一条1到n的路径,使路径上第k + 1大的边权尽量小. 考虑dp,令dp[i][j] 表示走到节点 i,路线上有 j 条电话线免费时,路径上最贵的电缆花费最小是多 ...
- POJ3662 [USACO08JAN]Telephone Lines (二分答案/分层图求最短路)
这道题目有两种解法: 1.将每个点视为一个二元组(x,p),表示从起点到x有p条路径免费,相当于构建了一张分层图,N*k个节点,P*k条边.在这张图上用优先队列优化的SPFA算法求解,注意这里的d数组 ...
- 洛谷 P1948 [USACO08JAN]电话线Telephone Lines
P1948 [USACO08JAN]电话线Telephone Lines 题目描述 Farmer John wants to set up a telephone line at his farm. ...
- 洛谷 P1948 [USACO08JAN]电话线Telephone Lines 题解
P1948 [USACO08JAN]电话线Telephone Lines 题目描述 Farmer John wants to set up a telephone line at his farm. ...
- Luogu P1948 [USACO08JAN]电话线Telephone Lines(最短路+dp)
P1948 [USACO08JAN]电话线Telephone Lines 题意 题目描述 Farmer John wants to set up a telephone line at his far ...
- 洛谷 P1948 [USACO08JAN]电话线Telephone Lines 最短路+二分答案
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 P1948 [USACO08JAN]电话线Telephone ...
- USACO Telephone Lines
洛谷 P1948 [USACO08JAN]电话线Telephone Lines https://www.luogu.org/problem/P1948 JDOJ 2556: USACO 2008 Ja ...
- BZOJ1614: [Usaco2007 Jan]Telephone Lines架设电话线
1614: [Usaco2007 Jan]Telephone Lines架设电话线 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 892 Solved: ...
随机推荐
- “酒香也怕巷子深” Smartflow-Sharp 工作流
导语 老话说得好,"酒香不怕巷子深"可是我又不是什么大咖,写得再好也没人知道.所以我今天准备再写写我的工作流组件,写得不好还请大家见谅.写文章对于我来说,有点感觉"茶壶里 ...
- CUMTCTF'2020 未完成 wp
Web babysqli burp抓包,发现有 的过滤,用/**/过滤空格. 报错注入 payload username=admin&password='/**/or/**/extractva ...
- WJQ与机房
sample input 5 6 7 2 3 1 1 5 0 6 0 0 8 6 6 5 3 4 3 7 8 2 4 0 0 6 9 sample output 20 样例解释: 分别以(2,1)为左 ...
- css引入本地字体
1.首先创建一个字体 @font-face { font-family: 'number_font'; //创建一个number_font字体名称 src: url('../../../style/F ...
- 如何在Windows7安装U盘中加入USB3.0驱动的支持
安装前请务必备份好您硬盘中的重要数据. 一.在Windows7安装U盘中加入USB3.0驱动的支持 故障现象: 原生Win7系统不包含USB3.0的驱动,所以无法使用USB3.0的U盘在US ...
- TP5自定义路由,为了安全性
1,入口文件index.php,不要指定任意模块,不然,自定义路由,就不会有任何效果哦 2,在配置文件 route.php 中引进 use think\Router 自带路由文件 3,将路由进 ...
- Hash算法简介
Hash算法性质 Hash算法用于计算消息摘要(Message Digest),可以将任意长的输入信息快速地转换为固定长度的输出.在区块链中主要利用了Hash算法的三种性质: 抗冲突性(Collisi ...
- python 使用pyinstaller打包程序
使用pyinstaller 打包.py脚本,在其他计算机可以直接运行,不需要python环境 安装pyinstaller库 pip install pystaller 打包程序 pyinstaller ...
- CentOS 7操作系统目录结构介绍
CentOS 7操作系统目录结构介绍 操作系统存在着大量的数据文件信息,相应文件信息会存在于系统相应目录中,为了更好的管理数据信息,会将系统进行一些目录规划,不同目录存放不同的资源. 根下目录结构说明 ...
- 【C语言编程学习笔记】利用462字节代码实现雅虎logo ACSII 动画!
ACSII 动画演示: 不过本文介绍的是另一个作品:c 代码实现雅虎 logo ACSII 动图. 运行后,你将会看到: 它是一个 20fps.抗锯齿的 Yahoo! logo ASCII 动 ...