1614: [Usaco2007 Jan]Telephone Lines架设电话线

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 1761  Solved: 752
[Submit][Status][Discuss]

Description

Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务。于是,FJ必须为此向电信公司支付一定的费用。 FJ的农场周围分布着N(1 <= N <= 1,000)根按1..N顺次编号的废弃的电话线杆,任意两根电话线杆间都没有电话线相连。一共P(1 <= P <= 10,000)对电话线杆间可以拉电话线,其余的那些由于隔得太远而无法被连接。 第i对电话线杆的两个端点分别为A_i、B_i,它们间的距离为 L_i (1 <= L_i <= 1,000,000)。数据中保证每对{A_i,B_i}最多只出现1次。编号为1的电话线杆已经接入了全国的电话网络,整个农场的电话线全都连到了编号为N的电话线杆上。也就是说,FJ的任务仅仅是找一条将1号和N号电话线杆连起来的路径,其余的电话线杆并不一定要连入电话网络。 经过谈判,电信公司最终同意免费为FJ连结K(0 <= K < N)对由FJ指定的电话线杆。对于此外的那些电话线,FJ需要为它们付的费用,等于其中最长的电话线的长度(每根电话线仅连结一对电话线杆)。如果需要连结的电话线杆不超过 K对,那么FJ的总支出为0。 请你计算一下,FJ最少需要在电话线上花多少钱。

Input

* 第1行: 3个用空格隔开的整数:N,P,以及K

* 第2..P+1行: 第i+1行为3个用空格隔开的整数:A_i,B_i,L_i

Output

* 第1行: 输出1个整数,为FJ在这项工程上的最小支出。如果任务不可能完成, 输出-1

Sample Input

5 7 1
1 2 5
3 1 4
2 4 8
3 2 3
5 2 9
3 4 7
4 5 6

Sample Output

4

二分答案len

每次判定将所有大于len的边长度全部置为1,小于等于len的边长度全部置为0

然后SPFA求出1到n的最短路,如果最短路小于等于k,则说明最小花费可以比len小

否则说明最小花费一定大于len

注意有可能不连通

#include<stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
typedef struct
{int v;int len;
}Road;
Road now;
vector<Road> G[1005];
queue<int> q;
int n, vis[1005], bet[1005];
int Jud(int x)
{int i, u, val;memset(bet, 62, sizeof(bet));memset(vis, 0, sizeof(vis));vis[1] = 1, bet[1] = 0;q.push(1);while(q.empty()==0){u = q.front();q.pop();vis[u] = 0;for(i=0;i<G[u].size();i++){now = G[u][i];val = 0;if(now.len>x)val = 1;if(bet[now.v]>bet[u]+val){bet[now.v] = bet[u]+val;if(vis[now.v]==0){vis[now.v] = 1;q.push(now.v);}}}}return bet[n];
}
int main(void)
{int m, i, k, x, y, len, l, r;while(scanf("%d%d%d", &n, &m, &k)!=EOF){for(i=1;i<=n;i++)G[i].clear();for(i=1;i<=m;i++){scanf("%d%d%d", &x, &y, &len);now.v = y, now.len = len;G[x].push_back(now);now.v = x;G[y].push_back(now);}l = 0, r = 1000000;while(l<r){m = (l+r)/2;if(Jud(m)<=k)r = m;elsel = m+1;}if(Jud(1000000)>k)printf("-1\n");elseprintf("%d\n", l);}return 0;
}

bzoj 1614: [Usaco2007 Jan]Telephone Lines架设电话线(二分+SPFA)相关推荐

  1. [BZOJ] 1614: [Usaco2007 Jan]Telephone Lines架设电话线

    1614: [Usaco2007 Jan]Telephone Lines架设电话线 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1806  Solve ...

  2. BZOJ——1614: [Usaco2007 Jan]Telephone Lines架设电话线

    Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1930  Solved: 823 [Submit][Status][Discuss] Descripti ...

  3. [BZOJ1614][Usaco2007 Jan]Telephone Lines架设电话线

    [Usaco2007 Jan]Telephone Lines架设电话线 时间限制: 1 Sec 内存限制: 128 MB 题目描述 Farmer John打算将电话线引到自己的农场,但电信公司并不打算 ...

  4. [Usaco2007 Jan]Telephone Lines架设电话线

    题目描述 FarmerJohn打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用.FJ的农场周围分布着N(1<=N<=1,000)根 ...

  5. 【二分答案】【最短路】bzoj1614 [Usaco2007 Jan]Telephone Lines架设电话线

    对于二分出的答案x而言,验证答案等价于将所有边权>x的边赋成1,否则赋成0,然后判断从1到n的最短路是否<=K. #include<cstdio> #include<cs ...

  6. [bzoj1614]: [Usaco2007 Jan]Telephone Lines架设电话线

    传送门 题意:给一个图,定义两点间的距离为路径上最大的边权,可以将路径上不多于k条边的权值变为0,求两点间最小距离 二分答案,判断时只要将大于当前二分值的边记为1,否则记为0,做一遍spfa,判断di ...

  7. bzoj 1614 Telephone Lines架设电话线 - 二分答案 - 最短路

    Description Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用. FJ的农场周围分布着N(1 <= N ...

  8. bzoj 1705: [Usaco2007 Nov]Telephone Wire 架设电话线【dp】

    i的初始化写成2了于是成功查错2h--怕不是个傻子 设f[i][j]为第i根高为j,转移是 \[ f[i][j]=min(f[i-1][k]+abs(k-j)*c+(j-h[i])^2)(j>= ...

  9. bzoj1705[Usaco2007 Nov]Telephone Wire 架设电话线(dp优化)

    1705: [Usaco2007 Nov]Telephone Wire 架设电话线 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 441  Solved ...

最新文章

  1. 机器学习中的集成学习模型实战完整讲解
  2. 揭秘百度核心技术:53位专家纯干货分享
  3. No PIL installation found INFO:superset.utils.screenshots:No PIL installation found
  4. 晨读打卡(2018.1)
  5. Python求找出1000以内所有的“完数”
  6. 一段js动态操作table代码
  7. 特征提取(Feature Detection)之——HOG (Histogram of Oriented Gradient)特征
  8. Oracle数据库卸载
  9. Ubuntu在线体验
  10. 高效解析xml的总结,闲下来写的
  11. easypoi导出word表格_Java导出word文档(POIamp;Spire.Doc)
  12. CocoaPods管理第三方
  13. UESTC 574 High-level ancients
  14. 苹果计算机音频无法使用,苹果电脑没声音了怎么回事
  15. BFU数据结构头歌实验:基于BF算法的病毒感染检测
  16. 名帖04 李阳冰 篆书《城隍庙碑》
  17. voip系统与网络电话
  18. 0306--iOS之阅读View Controller Programming Guide for iOS---(三)Presentations and Trasitions
  19. RPM软件安装包-rpm指令操作
  20. 中职计算机英语教学计划,中职英语基础模块1教学计划.docx

热门文章

  1. python在哪里写代码-python的代码在哪编写
  2. python发音语言-python 利用pyttsx3文字转语音过程详解
  3. python与office结合可以干什么-Python 进行Office开发(以Word为例)
  4. python 入门基础-Python入门基础
  5. 长虹新一代人工智能电视Q6A、Q6K发布,搭载远场语音识别
  6. 车机“智能互联”深度评测:第三弹 吉利博越PRO与GKUI 19
  7. linux中权限减少,Linux中权限管理
  8. java 两个项目 生成唯一id_java方式生成唯一id
  9. matlab仿真弹簧波,基于Matlab/Simulink的三弹簧谐振子微振动的仿真实验
  10. python怎么保存为py文件_将python保存到运行的py文件目录中创建的文件夹中