多年以后,笨笨长大了,成为了电话线布置师。由于地震使得某市的电话线全部损坏,笨笨是负责接到震中市的负责人。该市周围分布着N(1<=N<=1000)根据1……n顺序编号的废弃的电话线杆,任意两根线杆之间没有电话线连接,一共有p(1<=p<=10000)对电话杆可以拉电话线。其他的由于地震使得无法连接。

第i对电线杆的两个端点分别是ai,bi,它们的距离为li(1<=li<=1000000)。数据中每对(ai,bi)只出现一次。编号为1的电话杆已经接入了全国的电话网络,整个市的电话线全都连到了编号N的电话线杆上。也就是说,笨笨的任务仅仅是找一条将1号和N号电线杆连起来的路径,其余的电话杆并不一定要连入电话网络。

电信公司决定支援灾区免费为此市连接k对由笨笨指定的电话线杆,对于此外的那些电话线,需要为它们付费,总费用决定于其中最长的电话线的长度(每根电话线仅连接一对电话线杆)。如果需要连接的电话线杆不超过k对,那么支出为0.

请你计算一下,将电话线引导震中市最少需要在电话线上花多少钱?                              ——by洛谷(洛谷少有的良心翻译)

https://www.luogu.org/problem/show?pid=1948



二分答案+有条件的最短路;

  • 二分可能的答案,即对读入的边长sort,然后二分
  • 对于每个答案跑SPFA(因为手头有SPFA板子)
  • SPFA的松弛为spf[x[i].to]=spf[que[h]]+(x[i].dis>ct?1:0)(ct为二分的答案,意味着如果本边长度大于答案,则让这条边占用公司的名额)
  • 若spf[n]>k,则把n连入时不可能以当前答案为答案(因为以当前答案为答案,占用名额一定大于k)

代码如下:

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct ss
{
int to,next,dis;
}x[];
int first[];
int d[];
int que[],vis[],spf[];
int n,pd,k,num,p;
void build(int f,int t,int di)
{
x[++num].next=first[f];
x[num].to=t;
x[num].dis=di;
first[f]=num;
}
void spfa(int ,int );
int main()
{
int i,j,l,r,mid;
scanf("%d%d%d",&n,&p,&k);
for(i=;i<=p;i++)
{
scanf("%d%d%d",&j,&l,&d[i]);
build(j,l,d[i]);
build(l,j,d[i]);
}
sort(d+,d+p+);
l=;r=p;mid=(l+r)/;
while(l<r)
{
memset(spf,(0x3f3f3f),sizeof(spf));
pd=;
spfa(,d[mid]);
if(pd==)
{
r=mid;
mid=(l+r)/;
}
else
{
l=mid+;
mid=(l+r)/;
}
}
if(r==p&&pd==)d[r]=-;
printf("%d",d[r]);
return ;
}
void spfa(int s,int ct)
{
int h=,t=,i;
spf[s]=;
que[t]=s;vis[s]=;
while(h<t)
{
h++;
vis[que[h]]=;
i=first[que[h]];
while(i!=)
{
if(spf[x[i].to]>spf[que[h]]+(x[i].dis>ct?:))
{
spf[x[i].to]=spf[que[h]]+(x[i].dis>ct?:);
if(vis[x[i].to]==)
{
t++;
que[t]=x[i].to;
vis[que[t]]=;
}
}
i=x[i].next;
}
}
if(spf[n]<=k)
pd=;
return ;
}

祝AC哟;

[USACO08JAN]电话线Telephone Lines的更多相关文章

  1. 洛谷 P1948 [USACO08JAN]电话线Telephone Lines

    P1948 [USACO08JAN]电话线Telephone Lines 题目描述 Farmer John wants to set up a telephone line at his farm. ...

  2. 洛谷 P1948 [USACO08JAN]电话线Telephone Lines 题解

    P1948 [USACO08JAN]电话线Telephone Lines 题目描述 Farmer John wants to set up a telephone line at his farm. ...

  3. Luogu P1948 [USACO08JAN]电话线Telephone Lines(最短路+dp)

    P1948 [USACO08JAN]电话线Telephone Lines 题意 题目描述 Farmer John wants to set up a telephone line at his far ...

  4. 洛谷 P1948 [USACO08JAN]电话线Telephone Lines 最短路+二分答案

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 P1948 [USACO08JAN]电话线Telephone ...

  5. 洛谷P1948 [USACO08JAN]电话线Telephone Lines

    题目描述 Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone company is u ...

  6. [USACO08JAN]电话线Telephone Lines(分层图)/洛谷P1948

    这道题其实是分层图,但和裸的分层图不太一样.因为它只要求路径总权值为路径上最大一条路径的权值,但仔细考虑,这同时也满足一个贪心的性质,那就是当你每次用路径总权值小的方案来更新,那么可以保证新的路径权值 ...

  7. 题解【洛谷P1948】[USACO08JAN]电话线Telephone Lines

    题面 题解 很显然,答案满足单调性. 因此,可以使用二分答案求解. 考虑\(check\)的实现. 贪心地想,免费的\(k\)对电话线一定都要用上. 每次\(check\)时将小于\(mid\)的边权 ...

  8. 题解 guP1948 【[USACO08JAN]电话线Telephone Lines】

    二分+dij题目 首先读一遍题目,一定要仔细读(不要问我为什么,我就是受害者qwq 你会发现最终的费用是由最长的电话线决定的,而非电话线长度和. 至此就有了一个基本思路--枚举(二分)出可能的最长电话 ...

  9. P1948 [USACO08JAN]电话线Telephone Lines(二分答案+最短路)

    思路 考虑题目要求求出最小的第k+1大的边权,想到二分答案 然后二分第k+1大的边权wx 把所有边权<=wx的边权变为0,边权>wx的边权变为0,找出最短路之后,如果dis[T]<= ...

随机推荐

  1. Oracle11g用户密码过期

    今天一早来了,发现部署的网站访问报500,看日志,显示数据库连不上.然后我用sqldeveloper登录同样登不上,于是想到了之前碰到过的一个问题,Oralce11g的新特性:密码180天自动过期.随 ...

  2. spring framework 各版本源码下载地址

    现在spring的源码下载地址真是不好找,这次终于找到了.记录一下,以帮助需要的朋友. https://github.com/spring-projects/spring-framework/tags ...

  3. Spring 数据源配置二:多数据源

    通过上一节  Spring 数据源配置一: 单一数据源  我们了解单一数据源的配置, 这里我们继续多个数据源的配置 如下(applicationContent.xml 内容) 一:  Spring   ...

  4. POJ 3159 Candies(差分约束)

    http://poj.org/problem?id=3159 题意:有向图,第一行n是点数,m是边数,每一行有三个数,前两个是有向边的起点与终点,最后一个是权值,求从1到n的最短路径. 思路:这个题让 ...

  5. 四大主流云平台对比--CloudStack, Eucalyptus, vCloud Director和OpenStack。

    我迟早可能都要进入的领域,提前温习... 还有KVM,ESXI,API,XEN之间的术语和关系,也要心中有数.. ~~~~~~~~~~~~~~~~~~~ 云计算在如今的IT界一直是一个最热门的话题,鉴 ...

  6. 关于安装完Node.js 出现node is not dedined 问题

    今天想来接触下Node.js 神奇  怀着揣揣的心 从官网下载了windows 的64位mis版本  几个下一步就顺利安装完毕了 接着跟着新手教程走  不懂教程里的 苹果shell 是什么 反正就是检 ...

  7. SPRING IN ACTION 第4版笔记-第八章Advanced Spring MVC-001- 配置SpringFlow(flow-executor、flow-registry、FlowHandlerMapping、FlowHandlerAdapter)

    一. 1.Wiring a flow executor <flow:flow-executor id="flowExecutor" /> Although the fl ...

  8. tcpdump dump 网络流量

    tcpdump dump 网络流量 描述: Tcpdump 打印一个包的内容的描述在一个网络接口 匹配布尔值表达式 它也可以运行使用-w flag, 这样会保存包的数据到一个文件用于后面分析, 使用- ...

  9. BZOJ_1011_[HNOI2008]_遥远的行星_(近似)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1011 \(n\)个行星,第\(i\)颗行星的质量为\(m_i\),给出一个很小的常数\(A\) ...

  10. spring(7)--注解式控制器的数据验证、类型转换及格式化

    7.1.简介 在编写可视化界面项目时,我们通常需要对数据进行类型转换.验证及格式化. 一.在Spring3之前,我们使用如下架构进行类型转换.验证及格式化: 流程: ①:类型转换:首先调用Proper ...