Telephone Lines
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 7115   Accepted: 2603

Description

Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone company is uncooperative, so he needs to pay for some of the cables required to connect his farm to the phone system.

There are N (1 ≤ N ≤ 1,000) forlorn telephone poles conveniently numbered 1..N that are scattered around Farmer John's property; no cables connect any them. A total of P (1 ≤ P ≤ 10,000) pairs of poles can be connected by a cable; the rest are too far apart.

The i-th cable can connect the two distinct poles Ai and Bi, with length Li (1 ≤ Li ≤ 1,000,000) units if used. The input data set never names any {AiBi} pair more than once. Pole 1 is already connected to the phone system, and pole Nis at the farm. Poles 1 and need to be connected by a path of cables; the rest of the poles might be used or might not be used.

As it turns out, the phone company is willing to provide Farmer John with K (0 ≤ K < N) lengths of cable for free. Beyond that he will have to pay a price equal to the length of the longest remaining cable he requires (each pair of poles is connected with a separate cable), or 0 if he does not need any additional cables.

Determine the minimum amount that Farmer John must pay.

Input

* Line 1: Three space-separated integers: NP, and K
* Lines 2..P+1: Line i+1 contains the three space-separated integers: AiBi, and Li

Output

* Line 1: A single integer, the minimum amount Farmer John can pay. If it is impossible to connect the farm to the phone company, print -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

Source

/*
* @Author: Lyucheng
* @Date: 2017-07-24 11:08:55
* @Last Modified by: Lyucheng
* @Last Modified time: 2017-07-24 17:36:49
*/
/*
题意:题意很迷,有n个点,p条边,现在要修一条从1到n的线路,你可以将其中的k条线权值变为0,并且你修的线路中
最长的边,一定要是最小的 思路:二分答案,将大于mid的边权值为1,小于等于的为0,找出最少耗费的1,如果小于k那么就可以通过
*/
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h> #define MAXN 1005
#define INF 0x3f3f3f3f
#define MAXR 1000000 using namespace std; int n,p,k;
int u,v,w;
struct HeapNode //Dijkstra算法用到的优先队列的节点
{
int d,u;
HeapNode(int d,int u):d(d),u(u){}
bool operator < (const HeapNode &rhs)const
{
return d > rhs.d;
}
}; struct Edge //边
{
int from,to,dist;
Edge(int f,int t,int d):from(f),to(t),dist(d){}
}; struct Dijkstra
{
int n,m; //点数和边数,编号都从0开始
vector<Edge> edges; //边列表
vector<int> G[MAXN];//每个节点出发的边编号(从0开始编号)
bool done[MAXN]; //是否已永久标号
int d[MAXN]; //s到各个点的距离
int p[MAXN]; //p[i]为从起点s到i的最短路中的最后一条边的编号 void init(int n)
{
this->n=n;
for(int i=;i<n;i++) G[i].clear();//清空邻接表
edges.clear(); //清空边列表
} void AddEdge(int from,int to,int dist)
{//如果是无向图,每条无向边调用两次AddEdge
edges.push_back(Edge(from,to,dist) );
m = edges.size();
G[from].push_back(m-);
} bool dijkstra(int s,int pos)//求s到所有点的距离
{
priority_queue<HeapNode> Q;
for(int i=;i<n;i++) d[i]=INF;
d[s]=;
memset(done,,sizeof(done));
Q.push(HeapNode(,s) ); while(!Q.empty())
{
HeapNode x=Q.top(); Q.pop();
int u=x.u;
if(done[u]) continue;
done[u]= true; for(int i=;i<G[u].size();i++)
{
Edge& e= edges[G[u][i]];
int new_dist=e.dist>pos?:;
if(d[e.to]> d[u]+new_dist)
{
d[e.to] = d[u]+new_dist;
p[e.to] = G[u][i];
Q.push(HeapNode(d[e.to],e.to) );
}
}
}
if(d[n-]>k) return false;
else return true;
}
}DJ; int main(){
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
while(scanf("%d%d%d",&n,&p,&k)!=EOF){
DJ.init(n);
for(int i=;i<p;i++){
scanf("%d%d%d",&u,&v,&w);
DJ.AddEdge(u-,v-,w);
DJ.AddEdge(v-,u-,w);
}
int res=-;
int l=,r=MAXR,m;
while(l<=r){
m=(l+r)/;
if(DJ.dijkstra(,m)==true){//如果这个长度可以完成的话
r=m-;
res=m;
}else{//如果不可以完成的话
l=m+;
}
}
printf("%d\n",res);
}
return ;
}

poj 3662 Telephone Lines的更多相关文章

  1. (poj 3662) Telephone Lines 最短路+二分

    题目链接:http://poj.org/problem?id=3662 Telephone Lines Time Limit: 1000MS   Memory Limit: 65536K Total ...

  2. POJ 3662 Telephone Lines【Dijkstra最短路+二分求解】

    Telephone Lines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7214   Accepted: 2638 D ...

  3. poj 3662 Telephone Lines spfa算法灵活运用

    意甲冠军: 到n节点无向图,它要求从一个线1至n路径.你可以让他们在k无条,的最大值.如今要求花费的最小值. 思路: 这道题能够首先想到二分枚举路径上的最大值,我认为用spfa更简洁一些.spfa的本 ...

  4. POJ 3662 Telephone Lines (分层图)

    Telephone Lines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6785   Accepted: 2498 D ...

  5. poj 3662 Telephone Lines(最短路+二分)

    Telephone Lines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6973   Accepted: 2554 D ...

  6. poj 3662 Telephone Lines dijkstra+二分搜索

    Telephone Lines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5696   Accepted: 2071 D ...

  7. poj 3662 Telephone Lines(好题!!!二分搜索+dijkstra)

    Description Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone compa ...

  8. POJ 3662 Telephone Lines(二分答案+SPFA)

    [题目链接] http://poj.org/problem?id=3662 [题目大意] 给出点,给出两点之间连线的长度,有k次免费连线, 要求从起点连到终点,所用的费用为免费连线外的最长的长度. 求 ...

  9. POJ 3662 Telephone Lines (二分 + 最短路)

    Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone company is uncoop ...

随机推荐

  1. oracle sql*plus常用命令

    一.sys用户和system用户Oracle安装会自动的生成sys用户和system用户(1).sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户 ...

  2. Linux的硬盘使用情况、挂载、SSD挂载(查看df -h不能看到的卷)

    linux上的盘和window的有区别,磁盘空间必须挂载在目录上,要不然没用 对与新增的硬盘.SSD固态硬盘.挂载到linux上的操作如下: df -h      #显示目前在Linux系统上的文件系 ...

  3. Delphi中paramstr的用法

    原型                function   paramstr(i:index):string        对于任何application paramstr(0)都默认代表的是应用程序的 ...

  4. 调用惯例Calling Convention (或者说:调用约定)

    调用惯例影响执行效率,参数的传递方式以及栈清除的方式.   调用惯例 参数传递顺序 谁负责清除参数 参数是否使用暂存器 register 从左到右 被调用者 是 pascal 从左到右 被调用者 否 ...

  5. 用ESP8266+android,制作自己的WIFI小车

    整体思路ESP8266作为TCP服务器,,手机作为TCP客户端,自己使用Lua直接做到了芯片里面,省了单片机,,节约成本,其实本来就是个单片机(感觉Lua开发8266真的很好,甩AT指令好几条街,,而 ...

  6. extract-text-webpack-plugin 的使用及安装

    extract-text-webpack-plugin该插件的主要是为了抽离css样式,防止将样式打包在js中引起页面样式加载错乱的现象;首先我先来介绍下这个插件的安装方法: npm install ...

  7. 【转】FTP主动模式和被动模式的比较

    总是记不住FTP主动和被动模式的区别.放在这里,以备日后查阅.   FTP是仅基于TCP的服务,不支持UDP.与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口).通常来说这 ...

  8. 802.1Q VLAN技术原理

    文章出处:http://hi.baidu.com/x278384/item/d56b0edfd4f56a4eddf9be79 在数据通信和宽带接入设备里,只要涉及到二层技术的,就会遇到VLAN.而且, ...

  9. Oracle的常用命令之备份和恢复数据库

    1 将数据库TES完全导出,用户名system 密码manager 导出到D:\daochu.dmp中 exp system/manager@TEST file=d:\daochu.dmp 2 将数据 ...

  10. 【实验吧】Once More

    <?php if (isset ($_GET['password'])) { if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) = ...