题解 guP1948 【[USACO08JAN]电话线Telephone Lines】
二分+dij题目
首先读一遍题目,一定要仔细读(不要问我为什么,我就是受害者qwq
你会发现最终的费用是由最长的电话线决定的,而非电话线长度和。
至此就有了一个基本思路——枚举(二分)出可能的最长电话线长度,然后对其进行dij判断。
dij思路如下:
1.已知枚举出了假定答案ans;
2.在最短路过程中,判断有多少条线长度大于ans,并将其免费;
3.最后判断免费条数,若大于给出的t即不可行,反之可行。
开long long!!!
代码:
#include<bits/stdc++.h>
using namespace std;
long long ca,k,ma,ans,cnt,n,m,vis[2050],a,b,dis[2050],nex[20500],fst[2050],v[20500],w[20500],f[2050],sum[2050],ww;
int dj(long long ans)
{
    memset(dis,0x7f/3,sizeof(dis));
    memset(vis,0,sizeof(vis));
    dis[1]=0;
    long long minn,t=0;
   	for(register long long i=1;i<=n;i++)
    {
       	minn=1e12;
       	for(long long j=1;j<=n;j++)
       	{
            if(!vis[j]&&dis[j]<minn)
       		{
        	   	minn=dis[j];
        	   	t=j;
        	}
       	}
       	vis[t]=1;
       	for(register long long j=fst[t];j;j=nex[j])
       	{
       		if(w[j]>ans)
       		dis[v[j]]=min(dis[v[j]],dis[t]+1);
       		else
       		dis[v[j]]=min(dis[v[j]],dis[t]);
       	}
   	}
   	if(dis[n]>1e8)
   	{
   		cout<<-1;
   		return 2;
   	}
    if(dis[n]>k)
    return 0;
    return 1;
}
void binary(long long l,long long r)
{
    if(l>r)
    {
        cout<<ans;
        return ;
    }
    long long mid=(l+r)>>1;
    int dij=dj(mid);
    if(dij==2)
        return;
    if(dij==1)
    {
        ans=mid;
        binary(l,mid-1);
    }
    else
        binary(mid+1,r);
    return ;
}
int main()
{
    scanf("%lld%lld%lld",&n,&m,&k);
    for(long long i=1;i<=m;i++)
    {
        scanf("%lld%lld%lld",&a,&b,&ww);
        ma+=ww;
        nex[++cnt]=fst[a];
        fst[a]=cnt;
        v[cnt]=b;
        w[cnt]=ww;
        nex[++cnt]=fst[b];
        fst[b]=cnt;
        v[cnt]=a;
        w[cnt]=ww;
    }
    binary(0,ma);
    return 0;
} 
题解 guP1948 【[USACO08JAN]电话线Telephone Lines】的更多相关文章
- 洛谷 P1948 [USACO08JAN]电话线Telephone Lines 题解
		P1948 [USACO08JAN]电话线Telephone Lines 题目描述 Farmer John wants to set up a telephone line at his farm. ... 
- 洛谷 P1948 [USACO08JAN]电话线Telephone Lines
		P1948 [USACO08JAN]电话线Telephone Lines 题目描述 Farmer John wants to set up a telephone line at his farm. ... 
- Luogu P1948 [USACO08JAN]电话线Telephone Lines(最短路+dp)
		P1948 [USACO08JAN]电话线Telephone Lines 题意 题目描述 Farmer John wants to set up a telephone line at his far ... 
- 洛谷 P1948 [USACO08JAN]电话线Telephone Lines 最短路+二分答案
		目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 P1948 [USACO08JAN]电话线Telephone ... 
- 题解【洛谷P1948】[USACO08JAN]电话线Telephone Lines
		题面 题解 很显然,答案满足单调性. 因此,可以使用二分答案求解. 考虑\(check\)的实现. 贪心地想,免费的\(k\)对电话线一定都要用上. 每次\(check\)时将小于\(mid\)的边权 ... 
- 洛谷P1948 [USACO08JAN]电话线Telephone Lines
		题目描述 Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone company is u ... 
- [USACO08JAN]电话线Telephone Lines
		多年以后,笨笨长大了,成为了电话线布置师.由于地震使得某市的电话线全部损坏,笨笨是负责接到震中市的负责人.该市周围分布着N(1<=N<=1000)根据1……n顺序编号的废弃的电话线杆,任意 ... 
- [USACO08JAN]电话线Telephone Lines(分层图)/洛谷P1948
		这道题其实是分层图,但和裸的分层图不太一样.因为它只要求路径总权值为路径上最大一条路径的权值,但仔细考虑,这同时也满足一个贪心的性质,那就是当你每次用路径总权值小的方案来更新,那么可以保证新的路径权值 ... 
- P1948 [USACO08JAN]电话线Telephone Lines(二分答案+最短路)
		思路 考虑题目要求求出最小的第k+1大的边权,想到二分答案 然后二分第k+1大的边权wx 把所有边权<=wx的边权变为0,边权>wx的边权变为0,找出最短路之后,如果dis[T]<= ... 
随机推荐
- GO语言复合类型01---指针
			package main /* %T 类型占位符 %v 值占位符 %p 地址(指针)占位符,只有地址才能替换%p &value 对值取地址 *addr 对地址取值 **int 指向int型指针 ... 
- Java处理Excel中的日期格式
			Java处理Excel中的日期格式 2011-12-23 17:34:03| 分类: java |举报 |字号 订阅 下载LOFTER 我的照片书 | 在Excel中的日期格式,其数值为距离1 ... 
- 使用Relay部署编译ONNX模型
			使用Relay部署编译ONNX模型 本文介绍如何使用Relay部署ONNX模型的入门. 首先,必须安装ONNX软件包. 一个快速的解决方案是安装protobuf编译器,然后 pip install o ... 
- MindSpore数据集mindspore::dataset
			MindSpore数据集mindspore::dataset ResizeBilinear #include <image_process.h> bool ResizeBilinear(L ... 
- 使用Tensorize评估硬件内部特性
			使用Tensorize评估硬件内部特性 这是有关如何在TVM中执行张量的入门文档. 通过使用调度原语tensorize,人们可以用相应的内部函数代替计算单元,从而轻松利用handcrafted mic ... 
- TensorRT PoolingLayer
			TensorRT PoolingLayer IPoolingLayer在通道中实现池.支持的池类型有maximum.average和maximum average混合. Layer Descripti ... 
- 技能篇:shell教程及脚本编写
			前言 我们常时不会见到shell脚本,但是需要阅读开发linux脚本时,这又是一项必不可少的技能.本文在于提供基础的shell编程语法和简单的实例,帮助同学快速开发,可当做shell手册使用也非常善 ... 
- 【曹工杂谈】Mysql客户端上,时间为啥和本地差了整整13个小时,就离谱
			瞎扯一点非技术 本来今天上午就打算写的,结果中途被别的事吸引了注意力,公司和某保险公司合作推了一个医疗保险,让我们给父母买,然后我研究了半天条款:又想起来之前买的支付宝那个好医保,也买了两年多了,但是 ... 
- Spring Boot WebFlux-02——WebFlux Web CRUD 实践
			第02课:WebFlux Web CRUD 实践 上一篇基于功能性端点去创建一个简单服务,实现了 Hello.这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD We ... 
- 【dog与lxy】8.25题解-necklace
			necklace 题目描述 可怜的dog最终还是难逃厄运,被迫于lxy签下城下之约.这时候lxy开始刁难dog. Lxy首先向dog炫耀起了自己的财富,他拿出了一段很长的项链.这个项链由n个珠子按顺序 ... 
