题意:
      给你n个城市,m条双向边,每条边有自己的长度和最大运输量,让你找到一条时间小于等于T的运输能力最大的那条路...

思路:
      刚开始以为是费用流呢,后来发现根本不是,因为根本不是在求最优和最优下的其他最优,其实这个题目可以二分最大运输量,每次都根据二分结果建图,比如对于当前的mid,枚举每一条边,如果当前边的流量大于等于mid那么就把当前边连接到图里,枚举玩之后跑最短路,看如果1到n的距离小于等于T则满足,如果满足 low = mod + 1,ans = mid,如果不满足则

up = mid - 1.......二分枚举,建图,找到答案.


#include<stdio.h>
#include<string.h>
#include<queue>#define N_node 10000 + 500
#define N_edge 100000 + 10000
#define inf 2000000000

using namespace std;typedef struct
{int to ,next ,cost;
}STAR;typedef struct
{int a ,b ,c ,d;
}EDGE;STAR E[N_edge];
EDGE edge[N_edge];
int list[N_node] ,tot;
int s_x[N_node];void add(int a ,int b ,int c)
{E[++tot].to = b;E[tot].cost = c;E[tot].next = list[a];list[a] = tot;
}void SPFA(int s ,int n)
{for(int i = 0 ;i <= n ;i ++)s_x[i] = inf;s_x[s] = 0;int mark[N_node] = {0};mark[s] = 1;queue<int>q;q.push(s);while(!q.empty()){int tou ,xin;tou = q.front();q.pop();mark[tou] = 0;for(int k = list[tou] ;k ;k = E[k].next){xin = E[k].to;if(s_x[xin] > s_x[tou] + E[k].cost){s_x[xin] = s_x[tou] + E[k].cost;if(!mark[xin]){mark[xin] = 1;q.push(xin);}}}}
}void Buid(int m ,int mid)
{memset(list ,0 ,sizeof(list));tot = 1;for(int i = 1 ;i <= m ;i ++)if(edge[i].c >= mid){add(edge[i].a ,edge[i].b ,edge[i].d);add(edge[i].b ,edge[i].a ,edge[i].d);}
}bool OK(int T ,int n)
{SPFA(1 ,n);return s_x[n] <= T;
}int main ()
{int t ,n ,m ,T;int i ,a ,b ,c ,d;int max;scanf("%d" ,&t);while(t--){scanf("%d %d %d" ,&n ,&m ,&T);max = -1;for(i = 1 ;i <= m ;i ++){scanf("%d %d %d %d" ,&a ,&b ,&c ,&d);if(max < c) max = c;edge[i].a = a;edge[i].b = b;edge[i].c = c;edge[i].d = d;}int low ,mid ,up;low = 0;up = max;int ans = 0;while(low <= up){mid = (low + up) >> 1;Buid(m ,mid);if(OK(T ,n)){low = mid + 1;ans = mid;}elseup = mid - 1;}printf("%d\n" ,ans);}return 0;
}

hdu1839 二分最短路相关推荐

  1. jzoj5701-[gdoi2018day2]谈笑风生【莫比乌斯反演,二分,最短路】

    正题 题目大意 nnn个点,每个点有一个wiw_iwi​,mmm条边,对于一条边(x,y)(x,y)(x,y),边权为∑i=1wx∑j=1wy[gcd(i,j)==1](i+j)\sum_{i=1}^ ...

  2. 通往奥格瑞玛的道路-二分+最短路

    通往奥格瑞玛的道路 题目: 在艾泽拉斯,有n个城市.编号为1,2,3,...,n. 城市之间有m条双向的公路,连接着两个城市,从某个城市到另一个城市,会遭到联盟的攻击,进而损失一定的血量. 每次经过一 ...

  3. CCF201703-4 地铁修建(100分)【Kruskal算法+二分+最短路】

    试题编号: 201703-4 试题名称: 地铁修建 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 A市有n个交通枢纽,其中1号和n号非常重要,为了加强运输能力,A市决定在1号 ...

  4. 【2019 暑假JSOI Day 2 T2】小说(二分+最短路)

    目录 题目 思路 代码 题目 [题目背景] 由于小 X 是一位奆老, 奆老总是忙得一刻也停不下来. 他刚刚准备完食物, 小 X 童年的 挚友小 S 和小 Z 来找他帮忙了-- [题目描述] 小 S 和 ...

  5. 二分答案(by jie)

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

  6. 通往奥格瑞玛的道路(二分+迪杰斯特拉堆优化)

    题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯, ...

  7. 通往奥格瑞玛的道路(二分 + Dijkstra)

    通往奥格瑞玛的道路(二分 + 最短路) 思路: 1.二分可解决最大最小或者最小最大一类的问题 2.题目意思可以说我根本看不懂,其实题意:从1到n所有可行路径中,每个路径都有某个城市收费最大,求所有城市 ...

  8. 技巧专题1(二分、三分、位运算)

    二分 二分答案一般有以下的一些特征: A. 候选答案在区间[min,max]上按照某种属性有序,一般枚举复杂度较高. B. 容易判断某个点是否为可行 最大值最小. 判断一个东西是否在一个有序集合中出现 ...

  9. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

最新文章

  1. [bzoj2259][Oibh]新型计算机_Dijkstra
  2. 解读:为什么要做特征归一化/标准化?
  3. 记录 之 遇到的 lamda 表达式和功能理解
  4. 牛客-小w的魔术扑克【并查集】
  5. js表单验证,给出友好的提示
  6. Visual Studio 2019 for Mac 8.3 正式发布
  7. ewsa握手包怎么获得_三次握手和四次挥手以及TCP标志位的详细介绍
  8. 20191007:选择排序,插入排序,冒泡排序详解
  9. Emacs取消键值绑定
  10. 项目管理PMP高频考点复习资料(2-2)
  11. ffmpeg 视频转码
  12. Glide学习(二)—缓存策略
  13. OPenGL 基本知识(根据自己理解整理)
  14. LaTeX 嵌入MATLAB 绘图的字体
  15. 操作系统-------用P,V操作解决生产者和消费者问题(详解!!!)
  16. C++ 时间函数整理详解
  17. 我的macOS上有什么(持续更新使用情况)
  18. Ansys Fluent-Meshing: “ No license is avaiable at this time “
  19. 佛系码农~手把手教你如何绘制一辆会跑车
  20. 通达信软件L2接口的委托队列有什么用?

热门文章

  1. BZOJ 2748: [HAOI2012]音量调节【二维dp,枚举】
  2. Docker 私有仓库最简便的搭建方法
  3. 面向对象的编程学习笔记
  4. 5月22日阿里云网络变更公告
  5. 关于加载django模块时的错误:no module named django.conf.urls.defaults
  6. mysql--SQL编程(关于mysql中的日期,关于重叠) 学习笔记2.2
  7. HTTP 304 的理解
  8. 黑马lavarel教程---5、模型操作(AR模式)
  9. Spring注解之 @SuppressWarnings注解
  10. 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。