Cpp环境【POJ3622】【Usaco2008 Jan Silver】【Vijos1874】Telephone Lines架设电话线

【USACO 2008 January Silver】架设电话线 二分答案+最短路 这道题其实跟以前做的求所有到终点的路径的最大边的最小值很像,那个问题是用二分来解的,而这道题,无非是增加了一个k条边免费的一个限制。依旧可以使用二分答案的方法解决,在判定是否可行时,只需要判断是否能寻找到一条路径,使得该路径上大于我们二分的这个值的边不超过k条,实质上就是最短路做的一个变形而已,小于二分的值的边可以看做边权为0,大于的可以看做边权为1,直接求最短路看是否小于k即可#include 阅读详情
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 {Ai, Bi} pair more than once. Pole 1 is already connected to the phone system, and pole N is at the farm. Poles 1 and N 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.


  FJ打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务。于是,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  【输入格式】
  • Line 1: Three space-separated integers: N, P, and K
  • Lines 2..P+1: Line i+1 contains the three space-separated integers: Ai, Bi, and Li

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

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.


  输出一行一个整数,为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

【样例解释】

  一共有5根废弃的电话线杆。电话线杆1不能直接与电话线杆4、5相连。电话线杆5不能直接与电话线杆1、3相连。其余所有电话线杆间均可拉电话线。电信公司可以免费为FJ连结一对电话线杆。
  FJ选择如下的连结方案:1->3;3->2;2->5,这3对电话线杆间需要的电话线的长度分别为4、3、9。FJ让电信公司提供那条长度为9的电话线,于是,他所需要购买的电话线的最大长度为4。

Source  【原题传送门】

POJ3622 原题传送门

【思路梳理】

  题偏难,很好综合了数据结构以及二分猜答案的思想。考虑到每一个电线杆可以视作一个点,每一条电话线可以视为一条无向带权边,这样转化为一道图论题,使用Dijistra/SPFA;涉及到求最大值最小问题,显然应该考虑的是二分猜答案思想。
  那么大致思路就出来了:既然有k条边我们可以无代价地让电信局修建,那么这k条边就应该是权值最大的前k条边,把剩下的边交给FJ自己处理。那么显然,将最优路径构建后,我们的答案就是第k+1长的边的长度。二分猜答案,猜测的是第k+1条边的长度(不妨记为x):如果第i条边的长度超过了x,那么这条边按照我们的思路是应该交给电信局来修建的;否则的话交给FJ处理,不处理这一条边 (原因很简单:我们使用的是二分猜答案,猜测第k+1长的边的长度,这一条边不一定就是我们要求的第k+1长的那条边,即使就算是这样,记录这条边也无意义,因为我们已经在二分猜答案且这不会、一定会是最后的结果)。
  所以不妨将长度大于x的边的权值记为1,等于小于x的边记为0,看从起点1到终点n的距离dist[n]是否大于k,如果大于k,则说明需要电信局修建多于k条边(这k条边的长度都大于我们猜测的值x),猜测值不成立,需要在原区间[s,d]中更大的半个区间[x+1,d];如果猜测值成立,检查是否能够让边的总长度更小(即让电信局修的边的数量更多),我们应该在更小的半个区间[s,x-1]猜测。
  考虑什么时候输出-1?从1不能达到n点的时候。那么我们的dist[n]就会一直等于inf,即无论让电信局修的边长度多大、修的边的数量多少都不能够使得我们的结点n符合要求。

  下面给出代码,亲测能通过所有数据,10组数据108ms。

【Cpp代码】
#include<cstdio>
#include<queue>
#include<cstring>
#include<vector>
#include<algorithm>
#define maxn 1005
#define maxp 10005
#define inf 0x3fffffff //无穷大的另一种写法,大家可以学来提升*哔*(屏蔽音)格 
using namespace std;
int n,p,k,dist[maxn],qn[maxn];
vector<int>g[maxn],w[maxn];//图的存储结构不需要赘述
bool inq[maxn];

void SPFA(int t)//SPFA/Dijstra都可
{
    for(int i=1;i<=n;i++)   dist[i]=inf;//dist[i]的含义:在当前猜测值下从起点1连接到结点i所需要的由电信局修建的边的数量 
    memset(inq,false,sizeof(inq));
    memset(qn,0,sizeof(qn));
    queue<int>q;
    q.push(1);
    inq[1]=true;
    dist[1]=0;
    while(!q.empty())
    {
        int i=q.front();q.pop();inq[i]=false;
        for(int j=0;j<g[i].size();j++)
        {
            int k=g[i][j],c=w[i][j]>t ? 1:0 ;
            //如果这条边的长度大于了我们的猜测值,那么就应该交给电信局 
            if(dist[k]>dist[i]+c)
            {
                dist[k]=dist[i]+c;
                if(!inq[k])
                {
                    inq[k]=true;
                    qn[k]++;
                    if(qn[k]>n)     return ;//负权回路应该是不存在吧? 
                    q.push(k);
                }
            }
        }
    }
}

bool check(long long x)//二分猜答案,保险起见还是用了long long(因为d是inf,如果s也很大的话两者一加会超过int) 
{
    SPFA(x);
    if(dist[n]<=k)  return true;//注意一点,可以在这里判断是否能够从结点1找到一条路径到达结点n 
    return false;//如果不存在这样的一条路径,那么dist[n]显然等于inf 
}

void solve()
{
    int s=0,d=inf,ans=-1;//ans初值等于-1,即在目前猜测的int范围内无论猜测值多大都不能够使得dist[n]小于k,那么显然dist[n]=inf 
    while(s<=d)
    {
        long long mid=(long long)s+d>>1;//除以2的另一种写法,位运算 
        if(check(mid))  ans=mid,d=mid-1;//mid成立,看mid能否更小让电信局修更多边 
        else s=mid+1;
    }
    printf("%d",ans);
}

int main()
{
    freopen("in.txt","r",stdin);
    scanf("%d%d%d",&n,&p,&k);
    for(int i=1;i<=p;i++)
    {
        int x,y,z;
        scanf("%d%d%d",&x,&y,&z);
        g[x].push_back(y);w[x].push_back(z);
        g[y].push_back(x);w[y].push_back(z);//建立存储结构 
    }
    solve();


    return 0;
}
架设电话线 题解 题目描述 原题来自:USACO 2008 Jan. Silver 在郊区有 NNN 座通信基站,PPP 条双向电缆,第 iii 条电缆连接基站 AiA_iAi​ 和 BiB_iBi​。特别地,111 号基站是通信公司的总站,NNN 号基站位于一座农场中。现在,农场主希望对通信线路进行升级,其中升级第 iii 条电缆需要花费 LiL_iLi​。 电话公司正在举行优惠活动。农场主可以指定一条从 111 号基站到 NNN 号基站的路径,并指定路径上不超过 KKK 条电缆,由电话公司免费提供升级服务。农场主只需要支 阅读详情

相关推荐

EDK2多平台编译实战:从树莓派到RK3399的UEFI固件构建

本文提供了从树莓派到RK3399的EDK2多平台编译实战指南。详细介绍了UEFI固件构建的环境搭建、交叉编译配置、平台描述文件修改及常见问题排查,帮助开发者掌握为不同ARM架构硬件构建标准化启动固件的核心技能。

weixin_29193259的博客 836

【二分答案+spfa】架设电话线

架设电话线(phoneline) 【题目描述】 Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务。于是,FJ必须为此向电信公司支付一定的费用。 FJ的农场周围分布着N(1 <= N <= 1,000)根按1..N顺次编号的废弃的电话线杆,任意两根电话线杆间都没有电话线相连。一共P(1 <= P <= ...

diying4157的博客 474

从零到一:STM32G431的DSP库集成与FFT实战避坑指南

本文详细介绍了在STM32G431微控制器上集成CMSIS-DSP库并进行FFT实战开发的完整流程。重点解析了通过CubeMX和Keil环境配置DSP库的关键步骤、编译器宏定义陷阱及解决方案,并提供了FFT算法优化、内存管理及常见问题诊断的实用技巧,帮助开发者高效实现嵌入式信号处理应用。

oauth7security的博客 768

二分+链式前向星+spfa([Usaco2007 Jan]Telephone Lines架设电话线)

题目: FarmerJohn打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务。于是,FJ必须为此向电信公司支付一定的费用。FJ的农场周围分布着N(1<=N<=1,000)根按1…N顺次编号的废弃的电话线杆,任意两根电话线杆间都没有电话线相连。一共P(1<=P<=10,000)对电话线杆间可以拉电话线,其余的那些由于隔得太远而无法被连接。第i对电话线杆的两个端点...

qq_43585641的博客 243

细说STM32单片机SPI-Flash芯片的FatFS移植及其应用实例详解

本文以开发板上的SPI-Flash芯片W25Q16为媒介详细介绍CubeMX中FatFS各个参数的意义和设置,分析生成的代码中FatFS各个文件的作用和关联,完成针对W25Q16的硬件访问层的移植。继续使用旺宝红龙开发板STM32F407ZGT6 KITV1.0。

wenchm的博客 1638

MEMS惯性传感器关键参数解析与误差优化策略

本文深入解析了MEMS惯性传感器的关键性能参数,如零偏稳定性、噪声与随机游走、振动整流误差等,并阐述了这些误差如何导致设备导航漂移、姿态不稳等问题。文章重点探讨了从硬件选型、系统设计到校准补偿、算法融合(如卡尔曼滤波)以及温度补偿等实战优化策略,旨在帮助工程师有效提升自动驾驶、无人机等设备的测量精度与稳定性。

weixin_28363123的博客 414

架设电话线

1466.架设电话线,P1948 [USACO08JAN]Telephone Lines S,二分加最短路

欢迎您的光顾awa 445

保姆级教程:手把手调试PX4Ctrl的油门映射与姿态控制(附ROS节点配置)

本文提供PX4Ctrl的深度调参指南,涵盖油门映射、姿态控制及ROS节点配置等关键环节。通过详细解析PX4控制器的核心逻辑、递归最小二乘法(RLS)参数估计及状态机设计,帮助开发者优化无人机飞控性能。附实战案例与安全调试建议,适合PX4开发者进阶学习。

weixin_30363981的博客 382

[POJ3660] [USACO2008Jan,Silver] Cow Contest [floyd/dfs]

[Link\frak{Link}Link]

最后一次修改 230

基于YOLOv8的水果新鲜程度检测系统设计与实现

数据采集与预处理模块:负责收集水果图像数据并进行标注和增强深度学习模型:基于YOLOv8的目标检测模型新鲜度评估模块:根据检测结果评估水果新鲜程度用户界面:提供友好的交互界面系统集成:将各模块整合为完整系统水果新鲜程度检测需要包含多种水果在不同新鲜度状态下的图像数据集。:包含5种常见水果(苹果、香蕉、橙子、葡萄、草莓)在不同新鲜度下的图像包含约8,000张图像,分为新鲜和腐烂两类AgriVision:大型农业图像数据集,包含水果检测和分类任务Fruit-360:包含120种水果的高质量图像。

YOLO 444

Transformer模型详解

​本文主要介绍Transformer系列,从基础到理论,对注意力机制进行总结并解释《Attention is all you need》,提出解决sequence to sequence问题的transformer模型,用全attention的结构代替了lstm,抛弃了之前传统的encoder-decoder模型必须结合cnn或者rnn的固有模式,只用attention。文章的主要目的是在减少计算量和提高并行效率的同时不损害最终的实验结果。

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 5281

Poj3662 Usaco2008JanSilver Telephone Lines

题目大意 给定N个点P条边的无向图,官方提供k条免费边。求如何去掉免费边,使剩下的边之中最大的边权最小,输出最大的边权这题…最大的最小,很容易想到二分…而且这些边一定构成了最短路。

Zolrk的博客 524

【爬虫实战】Instagram博主图片爬取:模拟登录+滚动加载,轻松抓取高清美图

在当今社交媒体时代,Instagram作为全球最受欢迎的图片分享平台之一,汇聚了无数优质博主的海量精美图片。对于数据爱好者、营销分析师、AI训练数据收集者来说,如何高效、稳定地爬取Instagram博主的图片,成为了一项极具实用价值的技术挑战。然而,Instagram的反爬机制日益严格,传统的静态页面请求已经无法满足需求。本文将带你从零开始,使用2024-2025年最新技术栈,实现模拟登录、滚动加载、高清图片下载的全流程爬虫。✅ 全流程代码可直接运行✅ 模拟手机端请求绕过反爬。

2201_76125261的博客 595

USACO 2008 January Silver Telephone Lines /// 二分最短路 邻接表dijkstra oj22924

题目大意: 一共有N(1 ≤N≤ 1,000)个电线杆,有PP(1 ≤P≤ 10,000)对电线杆是可以连接的, 用几条线连接在一起的电线杆之间都可相互通信,现在想要使得电线杆1和电线杆N能相互通信, 并且电线公司提出KK(0 ≤K<N)条电线是可以免费使用的, 当使用电线的数量超过K条,超出的电线要收费, 收的总费用为去掉免费使用的K条电线之后最长...

babimei370256276的博客 211

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

BZOJ [Usaco2007 Jan]Telephone Lines架设电话线(POJ 3662)

题目描述 Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务。于是,FJ必须为此向电信公司支付一定的费用。     FJ的农场周围分布着N(1 根按1..N顺次编号的废弃的电话线杆,任意两根电话线杆间都没有电话线相连。一共P(1 对电话线杆间可以拉电话线,其余的那些由于隔得太远而无法被连接。     第i对电话线杆的两个端点分别为A_i、B_i,它们

jjs98 1192

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

编程题目《[usaco2008jan_silver]架设电话线》题解

描述 Description     Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供 免费服务。于是,FJ必须为此向电信公司支付一定的费用。   FJ的农场周围分布着N(1 杆,任意两根电话线杆间都没有电话线相连。一共P(1 线杆间可以拉电话线,其余的那些由于隔得太远而无法被连接。   第i对电话线杆的两个端点分别为A_i、B_i,它

Dante__Alighieri的专栏 777

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

编程题目《[usaco2008jan_silver]贝茜的晨练计划》题解

描述 Description     奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的 运动方式是每天进行N(1 会选择下一分钟是用来跑步还是休息。   贝茜的体力限制了她跑步的距离。更具体地,如果贝茜选择在第i分钟内跑 步,她可以在这一分钟内跑D_i(1 1。不过,无论何时贝茜的疲劳度都不能超过M(1 休息,那么她的疲劳度就会每分

Dante__Alighieri的专栏 1050

电话线

电话线 二分答案+最短路 问题描述 ​ Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务。于是,FJ必须为此向电信公司支付一定的费用。 FJ的农场周围分布着N根按1..N顺次编号的废弃的电话线杆,任意两根电话线杆间都没有电话线相连。一共P对电话线杆间可以拉电话线,其余的那些由于隔得太远而无法被连接。 第i对电话线杆的两个端点分别...

AnnieL 1155

[Usaco2007 Jan]Telephone Lines架设电话线[二分答案+最短路思想]

Description Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务。于是,FJ必须为此向电信公司支付一定的费用。 FJ的农场周围分布着N(1 <= N <= 1,000)根按1..N顺次编号的废弃的电话线杆,任意两根电话线杆间都没有电话线相连。一共P(1 <= P <= 10,000)对电话线杆间可以拉电话线,其余的那些由于隔...

weixin_30312563的博客 264

TF-IDF

参考:http://www.cnblogs.com/ybjourney/p/4793370.html http://www.cnblogs.com/ybjourney/p/4824903.html https://janav.wordpress.com/2013/10/27/tf-idf-and-cosine-similarity/ 词频(TF)和逆文档频率IDF 我们需...

weixin_30362083的博客 178

usaco 2008 January Telephone Lines 架设电话线 题解

题目大意:有N个点(N<=1000),P条边(P<=10000)(ps:真稀疏啊!)你可以把其中的K条边的权值改为0。(K<=N) 最后要求出从起点(1)到终点(N)经过的边中的最大值的最小值。(ps:好绕啊!) SYC大神邀请我做此题,并表示他用DP过了!(ORZ) 我想了一会,觉得可以用二分答案+验证。

阿蒋的专栏 2142

luogu P2419 [USACO08JAN]牛大赛Cow Contest

题目背景 [Usaco2008 Jan] 题目描述 N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a programming contest. As we all know, some cows code better than others. Each cow has a certain c...

weixin_30444105的博客 277

Poj3661 Usaco2008JanSilver Running

题目大意 奶牛们想要变成更强的运动员,所以Bessie开始了一项N分钟的训练,在每分钟,她可以选择跑步或者休息1整分钟 Bessie所能奔跑的极限距离,取决于她的“疲劳值”,一个一开始是0的值。当她选择在第i分钟奔跑时,她将会跑DiD_i 米,并且她的疲劳值将会增加1,但是这个值不能超过M。如果她选择休息,她的疲劳值将会每分钟减少1点。她直到疲劳值减少到0的时候才能再次开始奔跑。 N分钟的锻炼

Zolrk的博客 370

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

[Usaco2007 Jan]Telephone Lines架设电话线时间限制: 1 Sec 内存限制: 128 MB题目描述Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务。于是,FJ必须为此向电信公司支付一定的费用。 FJ的农场周围分布着N(1 <= N <= 1,000)根按1..N顺次编号的废弃的电话线杆,任意两根电话线杆间都没有电话线相连。一共P(1

slongle的专栏 889

AVplayer实现播放本地和网络视频(Swift3.0)

AVplayer An AVPlayer is a controller object used to manage the playback and timing of a media asset. It provides the interface to control the player’s transport behavior such as its ability to

欢迎来到Jack的程序世界 1万+

BZOJ1614架设电话线 Telephone Lines

题面 FarmerJohn打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务。于是,FJ必须为此向电信公司 支付一定的费用。FJ的农场周围分布着N(1&lt;=N&lt;=1,000)根按1..N顺次编号的废弃的电话线杆,任意两根电话线杆间 都没有电话线相连。一共P(1&lt;=P&lt;=10,000)对电话线杆间可以拉电话线,其余的那些由于隔得太远而无法被连接。 第i对电话...

juruo_xlh 519
上一篇: Cpp环境【POJ3258】【Usaco2006】【Vijos1329】River Hopscotch跳石游戏
下一篇: Cpp环境【NOIP practice】【BSOJ1878】【Vijos1172】 山头狙击战
cqyz_Lebmond
博客等级 码龄10年 18粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值