题解 guP1948 【[USACO08JAN]电话线Telephone Lines】
二分+dij题目
首先读一遍题目,一定要仔细读(不要问我为什么,我就是受害者qwq
你会发现最终的费用是由最长的电话线决定的,而非电话线长度和。
至此就有了一个基本思路——枚举(二分)出可能的最长电话线长度,然后对其进行dij判断。
dij思路如下:
1.已知枚举出了假定答案ans;
2.在最短路过程中,判断有多少条线长度大于ans,并将其免费;
3.最后判断免费条数,若大于给出的t即不可行,反之可行。
开long long!!!
代码:
#include<bits/stdc++.h>
using namespace std;
long long ca,k,ma,ans,cnt,n,m,vis[2050],a,b,dis[2050],nex[20500],fst[2050],v[20500],w[20500],f[2050],sum[2050],ww;
int dj(long long ans)
{
memset(dis,0x7f/3,sizeof(dis));
memset(vis,0,sizeof(vis));
dis[1]=0;
long long minn,t=0;
for(register long long i=1;i<=n;i++)
{
minn=1e12;
for(long long j=1;j<=n;j++)
{
if(!vis[j]&&dis[j]<minn)
{
minn=dis[j];
t=j;
}
}
vis[t]=1;
for(register long long j=fst[t];j;j=nex[j])
{
if(w[j]>ans)
dis[v[j]]=min(dis[v[j]],dis[t]+1);
else
dis[v[j]]=min(dis[v[j]],dis[t]);
}
}
if(dis[n]>1e8)
{
cout<<-1;
return 2;
}
if(dis[n]>k)
return 0;
return 1;
}
void binary(long long l,long long r)
{
if(l>r)
{
cout<<ans;
return ;
}
long long mid=(l+r)>>1;
int dij=dj(mid);
if(dij==2)
return;
if(dij==1)
{
ans=mid;
binary(l,mid-1);
}
else
binary(mid+1,r);
return ;
}
int main()
{
scanf("%lld%lld%lld",&n,&m,&k);
for(long long i=1;i<=m;i++)
{
scanf("%lld%lld%lld",&a,&b,&ww);
ma+=ww;
nex[++cnt]=fst[a];
fst[a]=cnt;
v[cnt]=b;
w[cnt]=ww;
nex[++cnt]=fst[b];
fst[b]=cnt;
v[cnt]=a;
w[cnt]=ww;
}
binary(0,ma);
return 0;
}
题解 guP1948 【[USACO08JAN]电话线Telephone Lines】的更多相关文章
- 洛谷 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 ...
- 题解【洛谷P1948】[USACO08JAN]电话线Telephone Lines
题面 题解 很显然,答案满足单调性. 因此,可以使用二分答案求解. 考虑\(check\)的实现. 贪心地想,免费的\(k\)对电话线一定都要用上. 每次\(check\)时将小于\(mid\)的边权 ...
- 洛谷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顺序编号的废弃的电话线杆,任意 ...
- [USACO08JAN]电话线Telephone Lines(分层图)/洛谷P1948
这道题其实是分层图,但和裸的分层图不太一样.因为它只要求路径总权值为路径上最大一条路径的权值,但仔细考虑,这同时也满足一个贪心的性质,那就是当你每次用路径总权值小的方案来更新,那么可以保证新的路径权值 ...
- P1948 [USACO08JAN]电话线Telephone Lines(二分答案+最短路)
思路 考虑题目要求求出最小的第k+1大的边权,想到二分答案 然后二分第k+1大的边权wx 把所有边权<=wx的边权变为0,边权>wx的边权变为0,找出最短路之后,如果dis[T]<= ...
随机推荐
- 从栈上理解 Go语言函数调用
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/518 本文使用的go的源码 1.15.7 前言 函数调用类型 这篇文 ...
- GO语言的JSON03---JSON文件的序列化与反序列化
package main import ( "encoding/json" "fmt" "os" ) type Human2 struct ...
- grasshopper | 通过图层引用线条 报错:“ Data conversion failed from Guid to Curve ”的避免方法
需求:通过 LunchBox - > layer reference 电池 可以快速选中图层所在的线条,但是选择的数据流错误 直接选择会报错--"Data conversion fai ...
- HTML <a> 标签的 href 属性
w3school页面的描述: HTML <a> 标签的 href 属性 HTML <a> 标签 实例 href 属性规定链接的目标: <a href="http ...
- YOLOV4各个创新功能模块技术分析(二)
YOLOV4各个创新功能模块技术分析(二) 四.数据增强相关-GridMask Data Augmentation 论文名称:GridMask Data Augmentation 论文地址:https ...
- 在NVIDIA A100 GPU上利用硬件JPEG解码器和NVIDIA nvJPEG库
在NVIDIA A100 GPU上利用硬件JPEG解码器和NVIDIA nvJPEG库 根据调查,普通人产生的1.2万亿张图像可以通过电话或数码相机捕获.这样的图像的存储,尤其是以高分辨率的原始格式, ...
- FPGA与ASIC:它们之间的区别以及使用哪一种?
FPGA与ASIC:它们之间的区别以及使用哪一种? FPGA Vs ASIC: Differences Between Them And Which One To Use? VL82C486 Sing ...
- 构造无限级树的框架套路,附上python/golang/php/js实现
目录 前言 需求 数据 结果 框架 递归框架 迭代框架 递归框架实现 python golang php js 迭代框架实现 python golang php js 前言 框架思维非常重要,和语言无 ...
- SSM和SpringBoot常用注解
SpringBoot的重要注解 @SpringBootApplication 创建 SpringBoot 项目之后会默认在主类加上 我们可以把 @SpringBootApplication看作是 @C ...
- 【Android编程】android平台的MITM瑞士军刀_cSploit源码解析及中间人攻击复现
/文章作者:Kali_MG1937 作者博客ID:ALDYS4 QQ:3496925334 未经允许,禁止转载/ 何为MITM欺骗,顾名思义,中间人攻击的含义即为在局域网中充当数据包交换中间人的角色 ...