对于二分出的答案x而言,验证答案等价于将所有边权>x的边赋成1,否则赋成0,然后判断从1到n的最短路是否<=K。

#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define N 1001
#define M 10001
int n,m,K,Xs[M],Ys[M],Zs[M];
int first[N],next[M<<1],v[M<<1],en;
bool w[M<<1];
void AddEdge(int U,int V,bool W)
{v[++en]=V;w[en]=W;next[en]=first[U];first[U]=en;
}
queue<int>q;
bool inq[N];
int d[N];
void spfa()
{memset(d,0x7f,sizeof(int)*(n+1)); d[1]=0; q.push(1); inq[1]=1;while(!q.empty()){int U=q.front();for(int i=first[U];i;i=next[i])if(d[v[i]]>d[U]+w[i]){d[v[i]]=d[U]+w[i];if(!inq[v[i]]) {q.push(v[i]); inq[v[i]]=1;}}q.pop(); inq[U]=0;}
}
bool check(int x)
{en=0; memset(first,0,sizeof(int)*(n+1));for(int i=1;i<=m;++i) {AddEdge(Xs[i],Ys[i],Zs[i]>x); AddEdge(Ys[i],Xs[i],Zs[i]>x);}spfa();return d[n]<=K;
}
int main()
{scanf("%d%d%d",&n,&m,&K);for(int i=1;i<=m;++i) scanf("%d%d%d",&Xs[i],&Ys[i],&Zs[i]);int l=0,r=1000001;while(r>l){int mid=(l+r>>1);if(check(mid)) r=mid;else l=mid+1;}printf("%d\n",l<=1000000?l:(-1));return 0;
}

转载于:https://www.cnblogs.com/autsky-jadek/p/4440902.html

【二分答案】【最短路】bzoj1614 [Usaco2007 Jan]Telephone Lines架设电话线相关推荐

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

    [Usaco2007 Jan]Telephone Lines架设电话线 时间限制: 1 Sec 内存限制: 128 MB 题目描述 Farmer John打算将电话线引到自己的农场,但电信公司并不打算 ...

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

    传送门 题意:给一个图,定义两点间的距离为路径上最大的边权,可以将路径上不多于k条边的权值变为0,求两点间最小距离 二分答案,判断时只要将大于当前二分值的边记为1,否则记为0,做一遍spfa,判断di ...

  3. bzoj 1614: [Usaco2007 Jan]Telephone Lines架设电话线(二分+SPFA)

    1614: [Usaco2007 Jan]Telephone Lines架设电话线 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1761  Solve ...

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

    1614: [Usaco2007 Jan]Telephone Lines架设电话线 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1806  Solve ...

  5. [Usaco2007 Jan]Telephone Lines架设电话线

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

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

    Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1930  Solved: 823 [Submit][Status][Discuss] Descripti ...

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

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

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

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

  9. bzoj 1705: [Usaco2007 Nov]Telephone Wire 架设电话线【dp】

    i的初始化写成2了于是成功查错2h--怕不是个傻子 设f[i][j]为第i根高为j,转移是 \[ f[i][j]=min(f[i-1][k]+abs(k-j)*c+(j-h[i])^2)(j>= ...

最新文章

  1. 作业32-完成评论功能
  2. 【IT笔试面试题整理】给定二叉树,给每层生成一个链表
  3. POJ 3694 Network
  4. 学python要什么基础-学Python首先要学什么?
  5. 程序如何在两个gpu卡上并行运行_【他山之石】如何支撑上亿类别的人脸训练?显存均衡的模型并行(PyTorch实现)...
  6. java版本位数_java 如何查看jdk版本位数
  7. C# 本地图片转Base64码和Base64码显示
  8. python微信支付_微信支付 python版
  9. 操作系统——实时操作系统和分时操作系统
  10. 李沐老师 PyTorch版——线性回归 + softmax回归的简洁实现(3)
  11. Computer Vision 杂志对何恺明 Rethinking ImageNet Pre-training 的最新评论
  12. 苹果6s plus信号显示无服务器,苹果iPhone 6Splus手机一直无服务如何解决
  13. 计算机各键的知识,联想电脑各功能键的说明
  14. MySQL面试题——聚簇索引和非聚簇索引
  15. Python中for循环的使用
  16. MySQL通过命令导入导出数据
  17. 《BYM》常见App中TaskAffinity的使用小记
  18. 记录一次糟心的appium启动篇
  19. 『JAVA集合·学习之路』-List(包含底层源码实现)
  20. 配置fckeditor

热门文章

  1. 当你累了,准备放弃时,看看这个吧!!!
  2. Wedge 100-32X 100GbE Data Center Switch
  3. [译]一个系统管理员眼中的DevOps
  4. HP 服务器使用 SmartStart CD 引导安装 windows 2008 操作系统
  5. ocr智能图文识别 tess4j 图文,验证码识别
  6. CentOS7.2中NFS1.3 安装
  7. Mysql新安装服务启动失败
  8. 学习MongoDB (1) :配置安装
  9. c#获取应用程序目录
  10. 用C#实现FTP搜索引擎