BZOJ1614:[USACO]Telephone Lines架设电话线(二分,最短路)
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,看这数据 ...
随机推荐
- [转]JavaScript和html5 canvas生成圆形印章
本文转自:http://www.cnblogs.com/dragondean/p/6013529.html 代码: function createSeal(id,company,name){ var ...
- Java基础(四)方法和数组
一.方法 1.方法的定义 方法也叫函数,就是一个能独立完成某个功能的一段代码.方法可以看作一个整体. 语法: 修饰符 返回类型 方法名字(数据类型 变量名,数据类型 变量名,……[形式参数(0个到n个 ...
- 一、python简单爬取静态网页
一.简单爬虫框架 简单爬虫框架由四个部分组成:URL管理器.网页下载器.网页解析器.调度器,还有应用这一部分,应用主要是NLP配合相关业务. 它的基本逻辑是这样的:给定一个要访问的URL,获取这个ht ...
- 基于bootstrap的图片轮播功能
插入js及css支持: <link rel="stylesheet" href="css/bootstrap.min.css"/> <scri ...
- hdu 3535 (最少1,最多1,任意)(背包混合)(好题)
http://blog.csdn.net/yan_____/article/details/8530833 这个问题一开始我用滚动,没有做出来,可能要需要先预处理排序才行,后来看了别人的方法,开始用二 ...
- C Primer Plus note8
error: too few arguments to function 'imax'| 运行上面的代码,产生了下面的错误: 中文翻译是:函数imax()中的参数太少. 查看imax()函数声明,发现 ...
- javascript检查数据中是否存在相同的元素
这里是两个用于数组中查找重复元素的demo,可以看看啦 <!DOCTYPE html><html lang="en"><head> <me ...
- css text-shadow
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- java.io.FileNotFoundException
1. 概述 上传图片到 o:/mmfiles_2017/39973/25444/333.jpg目录下 目录不存在会报标题中的错误 必须先创建目录 2. 方法 File filePath = new F ...
- js小数乘法精确率问题
研究拓扑图百分比乘法计算,带小数位计算会出现值溢出的问题 JS里做小数的乘法运算时会出现浮点错误: 结果是251.89999999999998 而不是251.9 这个问题想必有很多人为之头痛. 那 ...