Description
Input
Output
Sample Input
1 2 5
3 1 4
2 4 8
3 2 3
5 2 9
3 4 7
4 5 6
输入说明:
一共有5根废弃的电话线杆。电话线杆1不能直接与电话线杆4、5相连。电话
线杆5不能直接与电话线杆1、3相连。其余所有电话线杆间均可拉电话线。电信
公司可以免费为FJ连结一对电话线杆。
Sample Output
输出说明:
FJ选择如下的连结方案:1->3;3->2;2->5,这3对电话线杆间需要的
电话线的长度分别为4、3、9。FJ让电信公司提供那条长度为9的电话线,于是,
他所需要购买的电话线的最大长度为4。
Solution
对于这个图,若两点之间的路径长大于mid,那么这个边就必须需要一个名额k
设超过mid的边权为1,没超过的边为0
跑一遍SPFA,若最短路大于k则无法实现
Code
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#define N (1001)
using namespace std; int n,p,k,u,v,ll;
int dis[N],len[N][N],line[N*][];
bool used[N];
queue<int>q; bool check (int m)
{
memset(len,-,sizeof(len));
memset(used,false,sizeof(used));
memset(dis,0x3f,sizeof(dis));
for (int i=;i<=p;++i)
if (line[i][]>m)
{
len[line[i][]][line[i][]]=;
len[line[i][]][line[i][]]=;
}
else
{
len[line[i][]][line[i][]]=;
len[line[i][]][line[i][]]=;
} used[]=true; dis[]=; q.push();
while (!q.empty())
{
int x=q.front();
q.pop();
for (int i=;i<=n;++i)
{
if (len[x][i]!=-&&dis[x]+len[x][i]<dis[i])
{
dis[i]=dis[x]+len[x][i];
if (!used[i])
{
used[i]=true;
q.push(i);
}
}
}
used[x]=false;
}
if (dis[n]>k) return false;
else return true;
} int main()
{
scanf("%d%d%d",&n,&p,&k);
for (int i=;i<=p;++i)
{
scanf("%d%d%d",&u,&v,&ll);
line[i][]=u; line[i][]=v; line[i][]=ll;
}
int l=,r=;
while (l<r)
{
int mid=(l+r)/;
if (check(mid)) r=mid;
else l=mid+;
}
if (r!=) cout<<l;
else cout<<-;
}
BZOJ1614:[USACO]Telephone Lines架设电话线(二分,最短路)的更多相关文章
-
BZOJ 1614 [Usaco2007 Jan]Telephone Lines架设电话线 (二分+最短路)
题意: 给一个2e4带正边权的图,可以免费k个边,一条路径的花费为路径上边权最大值,问你1到n的最小花费 思路: 对于一个x,我们如果将大于等于x的边权全部免费,那么至少需要免费的边的数量就是 “设大 ...
-
[Usaco2007 Jan]Telephone Lines架设电话线(最短路,二分)
[Usaco2007 Jan]Telephone Lines架设电话线 Description FarmerJohn打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向 ...
-
[bzoj1614][Usaco2007Jan]Telephone Lines 架设电话线_二分答案_最短路
Telephone Lines bzoj-1614 Usaco-2007Jan 题目大意:给你一个n个点m条边的带边权无向图,求最短路.可以选取k条边免费. 注释:$1\le n\le 10^3$,$ ...
-
【bzoj1614】[Usaco2007 Jan]Telephone Lines架设电话线 二分+SPFA
题目描述 Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用. FJ的农场周围分布着N(1 <= N <= 1 ...
-
[Usaco2007 Jan]Telephone Lines架设电话线[二分答案+最短路思想]
Description Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用. FJ的农场周围分布着N(1 <= N ...
-
bzoj 1614 Telephone Lines架设电话线 - 二分答案 - 最短路
Description Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用. FJ的农场周围分布着N(1 <= N ...
-
BZOJ1614: [Usaco2007 Jan]Telephone Lines架设电话线
1614: [Usaco2007 Jan]Telephone Lines架设电话线 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 892 Solved: ...
-
BZOJ 1614: [Usaco2007 Jan]Telephone Lines架设电话线
题目 1614: [Usaco2007 Jan]Telephone Lines架设电话线 Time Limit: 5 Sec Memory Limit: 64 MB Description Farm ...
-
2018.07.20 bzoj1614: Telephone Lines架设电话线(二分+最短路)
传送门 这题直接做显然gg" role="presentation" style="position: relative;">gggg,看这数据 ...
随机推荐
-
linux input输入子系统应用分析
输入设备(如按键.键盘.触摸屏.鼠标等)是典型的字符设备,其一般的工作机理是底层在按键.触摸等动作发送时产生一个中断(或驱动通过timer定时查询),然后CPU通过SPI.I2 C或外部存储器总线读取 ...
-
机器学习算法基础(Python和R语言实现)
https://www.analyticsvidhya.com/blog/2015/08/common-machine-learning-algorithms/?spm=5176.100239.blo ...
-
记redis的一个测试
现有020的系统架构走库存,取券通过Fetch前n条来实现买n张优惠券,但此做法在高并发时有严重的性能问题,性能问题主要体现在数据库. 为了优化此性能,系统改为redis,走队列模式,即生产者消费者. ...
-
SQL Server 从数据库快照还原数据库
语法: restore database db_name from database_snapshot = 'db_snapshot_name'; ------------------------- ...
-
自定义jstl fn函数fns
1.引入函数声明: jsp页面需要引入自定义fns函数声明:<%@ taglib prefix="fns" uri="/WEB-INF/tlds/fns.tld&q ...
-
应用程序嵌入PowerBI报表登陆认证问题解决
https://github.com/AzureAD/azure-activedirectory-library-for-java/issues/144
-
IOS https抓包及10.3.3版本证书不生效问题解决
Charles安装 HTTP抓包 HTTPS抓包 1. Charles安装 官网下载安装Charles:https://www.charlesproxy.com/download/ 2. HTTP抓包 ...
-
(转) Java RandomAccessFile与MappedByteBuffer
RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须 ...
-
python-django rest framework框架
1.API 接口 是什么,干什么用的? API简单的来说就是一个url - http://www.oldboyedu.com/get_user/ - http://www.oldboyedu.com ...
-
YII2中使用控制台命令
有些时候我们需要通过crontab在后台跑一些定时脚本,这时候就需要用到控制台命令了. 我们在commands目录下创建TestController.php,当然脚本的位置是可以随意指定的,只需要在c ...