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,看这数据 ...
随机推荐
- IT自由职业者的第一个月(下)——为什么放弃5年嵌入式驱动开发转到WEB开发?
如果单从兴趣来看,其实我对Linux内核,Android中间件的兴趣要高于WEB,何况还有这么多年的经验积累,何必从头探索一个新的技术方向呢? 这里面原因是很多的,最核心的大概是以下4 ...
- ASID 与 MIPS 中 TLB 相关
ASID 为了提高TLB的性能,将TLB分成Global和process-specific.global 是指常驻在tlb中不会被刷出的,例如内核空间的翻译,process-specific 是指每个 ...
- java实现Redis分布式锁
网上到处都是分布式锁的代码,基本都是通过setNX 和 expire 这两个不是原子操作,肯定会有问题,不乏好多人通过用setNX的value当做过期时间来弥补等等.但是好像都不太好,或者多少有点问题 ...
- 最近使用日期控件时,用到了My97DatePicker控件,单日期控件,记录一下
以上是使用时的效果,可以自己设定日期有效区间,如下图: 对于起始日期和终止日期的控制如下: <td> <label >起始日期:</label> <input ...
- Live2D 博客页面添加板娘
偶然看到了live2d,神奇的二次元呀 在页脚Html代码中添加如下代码即可: <link rel="stylesheet" type="text/css" ...
- redis 安装与php扩展
php-redis扩展下载地址:https://pecl.php.net/package/redis/2.2.7/windows 注意: php_igbinary-5.5-vc11-ts-x86- ...
- [Java]private, public,protected,friendly的区别(转载)一下子就记住了
http://teddyboy200382.blog.163.com/blog/static/320112002008825112549780/ 说明这四个关键字之前,我想就 class 之间的关系做 ...
- MySQL数据库(3)----设置和使用自定义变量
MySQL支持定义自己的变量.这些变量可以被设置为查询结果,这使我们可以方便地把一些值存储起来供今后查询使用. ; +-----------------+ | @HisName:= name | +- ...
- 最长公共子序列(LCS)思维导图
- 求解2的N次幂的问题(多种方法)
#include <iostream> using namespace std; //计算2的N次幂 //一般方法,时间复杂度为2^n __int64 pow2(int n) { __in ...