河城荷取 二分答案 最大流
NKOJ2507 河城荷取
问题描述
在幻想乡,河城荷取是擅长高科技工业的河童。荷取的得意之作除了光学迷彩外,还有震动整个幻想乡的巨型人形『非想天则』。不过由于人形太过巨大,所以为它充能是一件很麻烦的事。人形一共有N个电能池,编号1..N。其中前L个电能池(即编号为1..L的电能池)连接着外部充能接口,而编号为N的电能池连接着动力炉核心。在N个蓄能池之间有M条单向管道,每条管道有一个激活代价cost和电能传输极限limit。当激活度达到某个值时,所以激活代价小于等于这个值的管道都会被激活,但是每一条管道只能够最多传送limit个单位的电能。外部接口到电能池和电能池到动力炉核心的管道传输没有限制并且激活代价为0。现在荷取想往动力炉核心输入至少K个单位的电能,求需要的最小激活度。
输入格式
第1行:4个正整数N,M,L, K
第2..M+1行:4个整数,u,v,limit,cost,表示一条由u到v的管道,传输极限limit,激活代价为cost
输出格式
第1行:1个整数,表示最小激活代价
样例输入
6 5 3 3
1 4 2 4
2 4 3 5
3 5 4 2
4 6 2 3
5 6 3 4
样例输出
4
数据规模
对于30%的数据: 1 ≤ L ≤ N ≤ 100 ,0 ≤ M ≤ 2,000 ,1 ≤ cost ≤ 10,000
对于60%的数据: 1 ≤ L ≤ N ≤ 1,000,0 ≤ M ≤ 20,000 ,1 ≤ cost ≤ 10,000
对于100%的数据:1 ≤ L ≤ N ≤ 2,000,0 ≤ M ≤ 80,000 ,1 ≤ cost ≤ 1,000,000
对于100%的数据:1 ≤ limit ≤ 1,000
保证任意(u,v)都只出现一次
显然,对给定的一些边集,输入的最大电流就是最大流。满足输入最大电流不低于K的激活代价显然满足二分性质。所以就可以二分答案,SAP求解。
这里有一个简单的优化:如果直接枚举cost,那么上界最大是1,000,000。但是稍微考虑下可以发现,最终答案一定是某一条边的cost值,所以我们只需要将cost排序后,对于这个数组二分答案即可,上界变小为了80,000。
代码:
#include<stdio.h>
#include<cstring>
#include<algorithm>
#define MAXN 2005
#define MAXM 200005
#define Min(x,y) ((x<y)?(x):(y))
using namespace std;int N,M,L,K,Hash[MAXM];struct node{int u,v,l,c;
}edge[MAXM];int tot,en[MAXM],nex[MAXM],las[MAXN],G[MAXM];
void ADD(int x,int y,int l)
{en[++tot]=y;nex[tot]=las[x];las[x]=tot;G[tot]=l;
}int S,T,P;int Cnt[MAXN],dis[MAXN];
int SAP(int x,int flow)
{int i,y,d=0,tmp;if(x==T)return flow;for(i=las[x];i;i=nex[i]){y=en[i];if(G[i]&&dis[x]==dis[y]+1){tmp=SAP(y,Min((flow-d),G[i]));G[i]-=tmp;G[i^1]+=tmp;d+=tmp;if(d==flow||dis[S]>=P)return d;}}Cnt[dis[x]]--;if(Cnt[dis[x]]==0)dis[S]=P;Cnt[++dis[x]]++;return d;
}bool check(int In)
{memset(las,0,sizeof(las));tot=1;memset(Cnt,0,sizeof(Cnt));memset(dis,0,sizeof(dis));P=N+1;S=0;T=N;int i,Ans=0;for(i=1;i<=M;i++)if(edge[i].c<=In)ADD(edge[i].u,edge[i].v,edge[i].l),ADD(edge[i].v,edge[i].u,0);for(i=1;i<=L;i++)ADD(0,i,1e9),ADD(i,0,0);while(dis[S]<=P)Ans+=SAP(S,1e9);return Ans>=K;
}int main()
{int i,u,v,l,c,Lans,Rans,mid,x;scanf("%d%d%d%d",&N,&M,&L,&K);for(i=1;i<=M;i++){scanf("%d%d%d%d",&edge[i].u,&edge[i].v,&edge[i].l,&edge[i].c);Hash[i]=edge[i].c;}sort(Hash+1,Hash+M+1);Hash[M+1]=1e9;Lans=0;Rans=M;while(Lans<=Rans){mid=Lans+Rans>>1;if(check(Hash[mid]))Rans=mid-1;else Lans=mid+1;}printf("%d",Hash[Lans]);
}
河城荷取 二分答案 最大流相关推荐
- 【codevs1422】河城荷取 二分+dinic
题目描述 Description 在幻想乡,河城荷取是擅长高科技工业的河童.荷取的得意之作除了光学迷彩外,还有震动整个幻想乡的巨型人形『非想天则』.不过由于人形太过巨大,所以为它充能是一件很麻烦的事. ...
- codevs 1422 河城荷取
二次联通门 : codevs 1422 河城荷取 /*codevs 1422 河城荷取二分费用重新构图最大流判断是否可行用了邻接矩阵来存初始的流量和费用...慢的要死*/ #include <c ...
- 【东方幻想乡系列模拟赛 Stage 4】 河城荷取
Description 在幻想乡,河城荷取是擅长高科技工业的河童.荷取的得意之作除了光学迷彩外,还有震动整个幻想乡的巨型人形『非想天则』.不过由于人形太过巨大,所以为它充能是一件很麻烦的事.人形一共有 ...
- 【Codevs1422】【网络流】河城荷取
东方幻想乡系列省选模拟赛Stage4.这些题目现在只在Codevs上有出现了别的地方都消失了. 题目描述 Description 在幻想乡,河城荷取是擅长高科技工业的河童.荷取的得意之作除了光学迷彩外 ...
- BZOJ 1738: [Usaco2005 mar]Ombrophobic Bovines 发抖的牛( floyd + 二分答案 + 最大流 )
一道水题WA了这么多次真是.... 统考终于完 ( 挂 ) 了...可以好好写题了... 先floyd跑出各个点的最短路 , 然后二分答案 m , 再建图. 每个 farm 拆成一个 cow 点和一个 ...
- poj2455 Secret Milking Machine(二分答案+最大流)
二分答案,双向边网络流,反向边容量直接设为val即可.可以选择的边容量为1,跑最大流,看是否满流(是否存在K条路径). #include <cstdio> #include <cst ...
- BZOJ2547 CTSC2002玩具兵(最短路径+二分答案+最大流)
先不考虑只有一个显得有些特殊的天兵. 可以发现超能力的作用实质上是使兵更换职业.每一个兵到达某个位置最少需要更换职业的次数是彼此独立的,因为如果需要某两人互换职业可以使他们各自以当前职业到达需要到的地 ...
- bzoj 3993 星际战争 - 二分答案 - 最大流
3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值减少到0或者 ...
- NUIST LevOJ P1826 荷取的基站布局 (状态压缩dp
题目描述 草根妖怪网络科技有限公司正委托河童重工架设若干个基站. 架设地点可以抽象成一个 n * n 的方格阵.每个基站提供信号的范围是其临近的上下左右四格(如果存在) 为了避免资源浪费,需要保证对于 ...
最新文章
- ios开发趋势_2020年将成为iOS应用开发的主要趋势
- 我的Blog页面设计
- 润乾报表与DERBY数据库的创建连接详解
- php 状态模式,PHP设计模式(十九)—状态模式 (State Pattern)
- Rose与PowerDesigner:两款建模工具对比分析比较[转]
- 基于Docker搭建Percona XtraDB Cluster数据库集群
- Hbase简介及常用命令相关知识总结
- phpcmsV9首页loop文章调用顶级栏目名称
- Spring Cloud在云计算SaaS中的实战经验分享
- mysql 主从日志文件_mysql 主从日志文件mysql
- 南阳市服务器主机销售,南阳市服务器价格
- 抖音回应视频泄露:草稿不会上传后台;苹果开卖5000元印度版iPhone XR;Jboot 2.2.5发布|极客头条...
- spool文件命名引用两个变量_Python 中命名空间与作用域介绍
- 抖音下载小助手GUI版
- html 隐藏广告代码,Javascript实现关闭广告实现删除广告的效果
- 阳光点歌系统服务器说明书,天行阳光机顶盒点歌系统安装及配置说明
- Unity导航小地图制作
- 集合--TreeSet类比较器排序的实现方式及如何保证元素的排序和唯一性
- 转行AI产品经理的学习过程
- 发票信息批量提取到 excel 软件 2.3
热门文章
- java的populate_JAVA BeanUtils.populate错误当离开空日期输入
- autojs微信运动自动点赞
- 数据结构基础之堆排序
- [低级错误]an attribute defined in * line * hides this method pylint (method-hidden)
- 微信机器人服务器成本,微信机器人案例汇总
- ESP8266 WIFI模块学习之路(7)——自写Android手机APP接受单片机数据
- 通过Vue+flvjs在HTML5中播放flv格式视频文件—demo及api
- 运动健身耳机什么好?四款运动蓝牙耳机之好评
- Android camera2 同时打开两颗物理摄像头
- Asp.Net Mvc基于Fleck开发的多人网页版即时聊天室