题意:

      给你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;
}
else

up = mid - 1;
}

printf("%d\n" ,ans);
}
return
0;
}

最新文章

  1. C++ 代码优化
  2. C# 调用WebService的3种方式 :直接调用、根据wsdl生成webservice的.cs文件及生成dll调用、动态调用
  3. TensorFlow白皮书
  4. [Effective JavaScript 笔记]第54条:将undefined看做“没有值”
  5. C#实现IDispose模式
  6. 每天一个linux 命令:which
  7. Ⅸ.spring的点点滴滴--IObjectFactory与IFactoryObject的杂谈
  8. HBase介绍
  9. “茴”字有四种写法,this也是一样
  10. hdu5751 Eades
  11. Dynamics CRM 在报表中获取当前登陆用户的guid
  12. helm-chart5,模板和访问文件
  13. 杭电 1061 Rightmost Digit计算N^N次方的最后一位
  14. java springboot2 jquery 抽奖项目源码
  15. UML类关系(依赖,关联,聚合,组合,泛化,实现)
  16. 使用CSDN-markdown编辑器
  17. es6 import export 引入导出变量方式
  18. DBGridEh 在粘贴中文时出现乱码和错位 100zhx_888]
  19. RedisUtil工具类
  20. web窗体之四则运算

热门文章

  1. c++指针数组与二维数组的最大区别
  2. 【Azure 服务总线】Azure Service Bus中私信(DLQ - Dead Letter Queue)如何快速清理
  3. FreeBSD 虚拟网卡 网桥 路由 映射
  4. uniCloud的简单使用 增删改查
  5. python之Click的简单应用
  6. Python模拟简易版淘宝客服机器人
  7. 2020年Acm暑期考核Hznu _2797
  8. PTA 输出数组元素
  9. RabbitMQ 入门 (Go) - 5. 使用 Fanout Exchange 做服务发现(下)
  10. shell算数和逻辑运算