USACO 2008 Jan. Silver

在郊区有 N 座通信基站,P 条双向电缆,第 i 条电缆连接基站 Ai​ 和 Bi​。特别地,1 号基站是通信公司的总站,N 号基站位于一座农场中。现在,农场主希望对通信线路进行升级,其中升级第i 条电缆需要花费Li​。

电话公司正在举行优惠活动。农场主可以指定一条从 1 号基站到 N 号基站的路径,并指定路径上不超过 K 条电缆,由电话公司免费提供升级服务。农场主只需要支付在该路径上剩余的电缆中,升级价格最贵的那条电缆的花费即可。求至少用多少钱能完成升级。

一句话题意 \ \   在加权无向图上求出一条从 1 号结点到 N 号结点的路径,使路径上第K+1 大的边权尽量小。

输入格式

第一行三个整数 N,P,K.

接下来 P 行,每行三个整数 Ai​,Bi​,Li​.

输出格式

若不存在从 1 到 N 的路径,输出 -1。否则输出所需最小费用。

样例

样例输入

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

样例输出

4

数据范围与提示

0≤K<N≤1000,1≤P≤2000

——————————————————————————————

二分付费边的长度。

那么所有小于等于该长度的边设为0,大于它的边的长度设为1,那么如果从点1到点n的最短距离小于等于k,说明可以可以建起,否则不可以。

注意判断-1。

——————————————————————————————

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=1010;
4 const int maxm=2010;
5 int n,m,k;
6 struct edge
7 {
8 int u,v,w,ww,nxt;
9 }e[maxm<<1];
10 int head[maxn],js;
11 void addage(int u,int v,int w)
12 {
13 e[++js].u=u;e[js].v=v;e[js].w=w;
14 e[js].nxt=head[u];head[u]=js;
15 }
16 int l,r,ans;
17 struct node
18 {
19 int dis,p;
20 bool operator < (node b)const
21 {
22 return dis>b.dis;
23 }
24 };
25
26 bool vis[maxn];
27 int dis[maxn];
28 bool pd(int x)
29 {
30 for(int i=1;i<=m+m;++i)e[i].ww=e[i].w<=x?0:1;
31 memset(dis,0x3f,sizeof dis);
32 memset(vis,0,sizeof vis);
33 priority_queue< node > q;
34 dis[1]=0;
35 q.push((node){0,1});
36 while(!q.empty())
37 {
38 node t=q.top();
39 q.pop();
40 int d=t.dis,p=t.p;
41 if(vis[p])continue;
42 vis[p]=1;
43 for(int i=head[p];i;i=e[i].nxt)
44 {
45 int v=e[i].v;
46 if(dis[v]>dis[p]+e[i].ww)
47 {
48 dis[v]=dis[p]+e[i].ww;
49 q.push((node){dis[v],v});
50 }
51 }
52 }
53 if(dis[n]==0x3f3f3f3f)
54 {
55 puts("-1");
56 exit(0);
57 }
58 return dis[n]<=k;
59 }
60 int main()
61 {
62 scanf("%d%d%d",&n,&m,&k);
63 for(int u,v,w,i=0;i<m;++i)
64 {
65 scanf("%d%d%d",&u,&v,&w);
66 addage(u,v,w);addage(v,u,w);
67 r=max(r,w);
68 }
69 while(l<=r)
70 {
71 int mid=(l+r)>>1;
72 if(pd(mid))ans=mid,r=mid-1;
73 else l=mid+1;
74 }
75 cout<<ans;
76 return 0;
77 }

LOJ10074架设电话线的更多相关文章

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

    1614: [Usaco2007 Jan]Telephone Lines架设电话线 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 892  Solved: ...

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

    题目 1614: [Usaco2007 Jan]Telephone Lines架设电话线 Time Limit: 5 Sec  Memory Limit: 64 MB Description Farm ...

  3. bzoj 1705;poj 3612:[Usaco2007 Nov]Telephone Wire 架设电话线

    Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设在已有的N(2 <= ...

  4. BZOJ_1705_[Usaco2007 Nov]Telephone Wire 架设电话线_DP

    BZOJ_1705_[Usaco2007 Nov]Telephone Wire 架设电话线_DP Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是 ...

  5. 【bzoj1705】[Usaco2007 Nov]Telephone Wire 架设电话线 dp

    题目描述 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设在已有的N(2 <= N < ...

  6. bzoj 1705: [Usaco2007 Nov]Telephone Wire 架设电话线——dp

    Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设在已有的N(2 <= ...

  7. 【BZOJ】1705: [Usaco2007 Nov]Telephone Wire 架设电话线

    [题意]给定一排n根杆高度hi,一个常数C,杆升高x的代价为x^2,相邻两杆之间架设电话线代价为高度差*C,求总代价最小. [算法]DP+辅助数组优化 [题解]令f[i][j]表示第i根杆高度为j的最 ...

  8. 【动态规划】bzoj1705: [Usaco2007 Nov]Telephone Wire 架设电话线

    可能是一类dp的通用优化 Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设 ...

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

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

随机推荐

  1. 工作中用的sql

    //字段是空字符串或者null select * from blade_process_should_pay_invoice where is_deleted = 0 and process_inst ...

  2. spring 切面织入报错:java.lang.ClassCastException: com.sun.proxy.$Proxy7 cannot be cast to...

    报这个错,只有一个原因,就是转化的类型不对. 接口过父类的子类,在强制转换的时候,一定要用接口父类来定义. 代码示例: package com.luoluo.dao.impl; import java ...

  3. Adnc简介

    Adnc是一个轻量级的.Net Core微服务(microservices)快速开发框架,同时也可以应用于单体架构系统的开发.框架基于JWT认证授权,包含基础的后台管理功能,代码简洁.易上手.学习成本 ...

  4. hadoop目录结构

    Hadoop目录结构 重要目录结构: bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本 etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件 lib目录:存放H ...

  5. fastjsion反序列化漏洞渗透测试笔记

    本文原创地址:https://www.cnblogs.com/yunmuq/p/14268028.html 一.背景 fastjsion是阿里的开源Java工具:https://github.com/ ...

  6. 计算机考研复试真题 a+b(大数加法)

    题目描述 实现一个加法器,使其能够输出a+b的值. 输入描述: 输入包括两个数a和b,其中a和b的位数不超过1000位. 输出描述: 可能有多组测试数据,对于每组数据, 输出a+b的值. 示例1 输入 ...

  7. 通过写n本书的积累,我似乎找到了写好技术文章的方法(回复送我写的python股票电子书)

    我写的书不算少,写的博文就更多了,但大多数书的销量也就一般,而我写的技术文章里,虽然也有点击过万的,但不少点击量也就只有三位数. 通过不断反思,也通过对比了一些畅销书和顶流文章,我似乎找到了一些原因, ...

  8. Openstack Ocata 公共服务端(三)

    Openstack Ocata 公共服务端 mysql 安装: yum install mariadb mariadb-server mysql 安装过程省略 rabbit-server 安装包: # ...

  9. Docker学习笔记之使用Docker数据卷

    Docker数据卷将数据存储到主机而非容器,多个容器需要共享数据时,常常使用数据卷. 1. 为容器设置数据卷(不指定主机目录) 2. 容器与主机之间.容器与容器之间共享数据卷(指定主机目录) 3. 使 ...

  10. Hdfs手动执行Balance

    问题发现: 经巡检,服务器中一台节点的hadoop磁盘占用过多,是其它节点的三倍,导致数据严重不均衡. 解决过程: 两种命令: hadoop的bin目录下,运行命令start-balancer.sh ...