其实是和奥格瑞玛一样的题啦。

但还是想了很久后看了题解。

多年以后,笨笨长大了,成为了电话线布置师。由于地震使得某市的电话线全部损坏,笨笨是负责接到震中市的负责人。该市周围分布着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.

请你计算一下,将电话线引导震中市最少需要在电话线上花多少钱?如果无解,输出-1。

输入输出格式

输入格式:

输入文件的第一行包含三个数字n,p,k;

第二行到第p+1行,每行分别都为三个整数ai,bi,li。

输出格式:

一个整数,表示该项工程的最小支出,如果不可能完成则输出-1.

题设:最长的电话线花费最少是多少 。

同样是一道二分答案。

我们仿照上一题,二分最后的花费(最长电话线的长度)。

但是这题比较 特别的是电信(移动)公司会免费提供k条线路。这个条件怎么用?因为是免费的,所以我们肯定贪心地想要先把这几条线路用在比当前二分出的答案长的道路上,把钱花在刀刃上嘛。这个思想怎么实现?我们可以在每次的spfacheck中把比当前答案大的边设为1,比当前长度小的答案设为0.,于是我们就成功地重载了dis数组的含义,他不再表示最短路程长度,而是用了优惠的边的个数。

其他注意事项:左边界为0(因为题目中说有不超过k对的情况),连两次边。

难点:转化dis数组的含义,利用免费搭建k对的条件。
code

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<queue>
 4 #include<cstring>
 5
 6 using namespace std;
 7 const int inf=0x7f7f7f7f;
 8
 9 int n,p,k,tot,mx,s;
10 int head[20000],visit[20000],dis[20000];
11 struct node{
12     int to,next,val;
13 }edge[20000];
14
15 void add(int x,int y,int z)
16 {
17     edge[++tot].to=y;
18     edge[tot].val=z;
19     edge[tot].next=head[x];
20     head[x]=tot;
21 }
22
23 bool spfa_check(int cnt)
24 {
25     memset(visit,0,sizeof(visit));
26     for(int i=1;i<=n;i++) dis[i]=inf;
27     queue<int>q;
28     dis[1]=0;visit[1]=1;q.push(1);
29     while(!q.empty())
30     {
31         int x=q.front();
32         q.pop();visit[x]=0;
33         for(int i=head[x];i;i=edge[i].next)
34         {
35             int y=edge[i].to;
36             if(edge[i].val>cnt) s=dis[x]+1;
37             else s=dis[x];
38             if(s<dis[y])
39             {
40                 dis[y]=s;
41                 if(!visit[y])
42                 {
43                     visit[y]=1;
44                     q.push(y);
45                 }
46             }
47         }
48     }
49     if(dis[n]<=k) return 1;
50     return 0;
51 }
52
53 int main()
54 {
55     scanf("%d%d%d",&n,&p,&k);
56     for(int i=1;i<=p;i++)
57     {
58         int u=0,v=0,w=0;
59         scanf("%d%d%d",&u,&v,&w);
60         mx=max(mx,w);
61         add(u,v,w);
62         add(v,u,w);
63     }
64     int l=0,r=mx;
65     if(!spfa_check(r))
66     {
67         printf("-1");
68         return 0;
69     }
70     while(l<r)
71     {
72         int mid=(l+r)>>1;
73         if(spfa_check(mid)) r=mid;
74         else l=mid+1;
75     }
76     printf("%d",l);
77     return 0;
78 }

View Code

转载于:https://www.cnblogs.com/nopartyfoucaodong/p/9339514.html

LuoguP1948 电话线 【二分答案/图论】相关推荐

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

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

  2. 二分答案(by jie)

    二分答案(by jie) 目录 1.前言: 2.方法: 3.典型例题 例题1.奇怪的函数(裸二分答案) 例题2.关押罪犯(二分答案+染色) 例题3.电话网络(二分答案+最短路径) 例题4.softwa ...

  3. UVA1396 Most Distant Point from the Sea(AM - ICPC - Tokyo - 2007)(计算几何,半平面交 + 二分答案)

    整理的算法模板合集: ACM模板 题目传送门 见<训练指南>P279 很明显就是一个二分答案,它问的是最远的点,直接枚举因为这里都是double类型的数所以有无限个点,我们可以直接二分. ...

  4. UVA1146 / LA3211(ACM-ICPC 2004 Europe - Southwestern) Now or later(2-SAT问题 + 二分答案)

    题目要求为 最大化最小值,很明显就是二分答案. 题目中每个飞机 要么是一种状态(早),要么是另一种状态(晚),考虑 2-SAT. 我们二分答案,二分着陆时间间隔的最小值 x. 枚举每两个飞机 p , ...

  5. 解题报告:luoguP2868 Sightseeing Cows G(最优比率环,负环判定,二分答案)

    根据题意,我们要环上各点权值之和除以各边权值之和最大. 求最大答案,很明显可以使用二分答案.那么我们假设当前答案为 x,如果有更大的答案,那么方程就可以按下图转换: 也就是说如果有更大的答案,则有一个 ...

  6. P2759 奇怪的函数(二分答案,数学运算)

    P2759 奇怪的函数 范围2e92e92e9,直接枚举肯定超时,正着直接求答案求不出来,那么运用逆向思维,直接二分答案判断即可.这道题涉及简单的数学运算. 要xx>=nx^x>=nxx& ...

  7. P3743 kotori的设备(二分答案,思维,线性)难度⭐⭐⭐

    题目链接 题目背景 kotori 有 n 个可同时使用的设备. 题目描述 第 i 个设备每秒消耗ai个单位能量.能量的使用是连续的,也就是说能量不是某时刻突然消耗的,而是匀速消耗.也就是说,对于任意实 ...

  8. 【基础算法】二分法(二分答案,二分查找),三分法,Dinkelbach算法,算法详解+例题剖析

    目录 一 . 二分法 二分搜索得要求: 二分查找步骤: 二分答案: 玄学的二分(二分答案) 二 . 三分法 例题 三.01分数规划问题相关算法与题目讲解(二分法与Dinkelbach算法) 一 . 二 ...

  9. 洛谷P1182 数列分段Section II 二分答案

    洛谷P1182 数列分段Section II 二分答案 题意:将 n 个 数 分为 m段 求一种方案,使这m段中最大的和 最小 额..可能有点拗口,其实就是说每一种方案,都有对应的 每段和的最大值, ...

最新文章

  1. AJAX初探,XMLHttpRequest介绍
  2. 微软自夸Edge浏览器的电源效率
  3. [Linux]NAT和代理服务器
  4. 使用交叉存取得到更快推荐算法
  5. python lxml解析html,当使用lxml.html解析html时,等同于InnerHTML
  6. python文本编辑器下载_海龟编辑器(Python编辑器)
  7. 机器数与码制——如何在计算机内部存储数字、进行数据运算
  8. edittext禁止换行符但能自动换行简书_利用 subfinder 让群辉 NAS 实现自动下载字幕...
  9. 仿某某网站模板thinkphp_7个免费PPT模板网站,远离撞P的尴尬
  10. CSS border 属性及用border画各种图形
  11. ISP对pptpd及1723端口的动态管控初探
  12. 多臂赌博机Multi-Armed Bandit(MAB)
  13. java8对类集合使用 Comparator.comparing 进行排序
  14. 软件设计师 软考 真题练习 (三)
  15. CSS基础(二)--盒模型与浮动
  16. 明日之后什么服务器物品最便宜,明日之后:玩家晒物价最低的服务器,看到uzi标价,观众直接酸了...
  17. “程序猿”面试篇(一)聊项目
  18. CAD怎么打印彩色图纸
  19. 计算机机房标准pdf,计算机机房建设标准要点.pdf
  20. 机器人或将人类推向“无能之下的自由”

热门文章

  1. 网络抖动多少ms算正常_子宫内膜厚度多少算正常?
  2. python精通书籍-清华学霸整理,Python入门到精通这几本书帮你快速入行
  3. python爬虫流程-什么是爬虫?爬虫的基本流程是什么?
  4. 手机怎么下载python并安装-Python入门【1】Python下载安装,这几步你要了解
  5. 编程软件python下载怎么读-怎么学python编程语言,他说,你需要这个工具
  6. php和python哪个用了开发web好-php与python谁更适合web开发?为什么?
  7. python开发安卓程序-用python开发android应用(1)
  8. python界面设计实例-Python GUI项目实战(二)主窗体的界面设计与实现
  9. python线下培训-天津python培训,0基础学python线上还是线下好?
  10. python培训费用-Python培训费用得多少?