时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 大师 Master
题目描述 Description

在幻想乡,河城荷取是擅长高科技工业的河童。荷取的得意之作除了光学迷彩外,还有震动整个幻想乡的巨型人形『非想天则』。不过由于人形太过巨大,所以为它充能是一件很麻烦的事。人形一共有N个电能池,编号1..N。其中前L个电能池(即编号为1..L的电能池)连接着外部充能接口,而编号为N的电能池连接着动力炉核心。在N个蓄能池之间有M条单向管道,每条管道有一个激活代价cost和电能传输极限limit。当激活度达到某个值时,所以激活代价小于等于这个值的管道都会被激活,但是每一条管道只能够最多传送limit个单位的电能。外部接口到电能池和电能池到动力炉核心的管道传输没有限制并且激活代价为0。现在荷取想往动力炉核心输入至少K个单位的电能,求需要的最小激活度。

输入描述 Input Description

第1行:4个正整数N,M,L, K
  第2..M行:4个整数,u,v,limit,cost,表示一条由u到v的管道,传输极限limit,激活代价为cost

输出描述 Output Description

第1行:1个整数,表示最小激活代价

样例输入 Sample Input

6 5 3 3
1 4 2 4
2 4 3 5
3 5 4 2
4 6 2 3
5 6 3 4

样例输出 Sample Output

4

数据范围及提示 Data Size & Hint

数据范围
  对于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
 提示
  样例解释:
  当激活度为4时,除了(2,4)外其他管道都能够使用。此时能够输入恰好4个单位电能。具体如下:
  (1,4) 输送2个单位电力
  (4,6) 输送2个单位电力
  (3,5) 输送2个单位电力
  (5,6) 输送2个单位电力
  

  注意:
  保证任意(u,v)都只出现一次。

 
二分代价+网络流dinic验证。
#include <cstring>
#include <cstdio>
#include <queue>
#define INF 0x7ffffff
#define M 80005
#define N 2005 using namespace std;
void read(int &x)
{
x=;bool f=;
char ch=getchar();
for(;ch>''||ch<'';ch=getchar()) if(ch=='-') f=;
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-'';
x=f?(~x)+:x;
}
struct Edge
{
int next,to,flow;
Edge (int next=,int to=,int flow=) :next(next),to(to),flow(flow){}
}edge[M<<];
int S,T,u[M],v[M],lim[M],cost[M],n,m,l,k,dep[N],head[N<<],cnt=;
void insert(int u,int v,int w)
{
edge[++cnt]=Edge(head[u],v,w);
head[u]=cnt;
}
void build(int x)
{
memset(head,,sizeof(head));
memset(edge,,sizeof(edge));
cnt=;
for(int i=;i<=m;i++)
{
if(cost[i]<=x)
{
insert(u[i],v[i],lim[i]);
insert(v[i],u[i],);
}
}
for(int i=;i<=l;i++)
{
insert(S,i,INF);
insert(i,S,);
}
}
bool bfs()
{
memset(dep,-,sizeof(dep));
queue<int>q;
q.push(S);
dep[S]=;
while(!q.empty())
{
int Top=q.front();
q.pop();
for(int i=head[Top];i;i=edge[i].next)
{
int v=edge[i].to;
if(dep[v]==-&&edge[i].flow)
{
dep[v]=dep[Top]+;
q.push(v);
}
}
}
if(dep[T]>) return true;
else return false;
}
int dfs(int now,int t,int came_flow)
{
int f,rest=;
if(now==t||came_flow==) return came_flow;
for(int i=head[now];i;i=edge[i].next)
{
int v=edge[i].to;
if(dep[v]==dep[now]+&&edge[i].flow&&(f=dfs(v,t,min(came_flow,edge[i].flow))))
{
rest+=f;
came_flow-=f;
edge[i].flow-=f;
edge[i^].flow+=f;
if(came_flow==) return rest;
}
}
if(rest==) dep[now]=INF;
return rest;
}
int dinic()
{
int ans=;
for(;bfs();ans+=dfs(S,T,INF));
return ans;
}
int main()
{
read(n);
read(m);
read(l);
read(k);
S=n+,T=n;
for(int i=;i<=m;i++)
{
read(u[i]);
read(v[i]);
read(lim[i]);
read(cost[i]);
}
int l=-,r=;
while(r-l>)
{
int mid=(l+r)>>;
build(mid);
if(dinic()>=k)
r=mid;
else l=mid;
}
printf("%d",r);
return ;
}

codevs 1422 河城荷取的更多相关文章

  1. Luogu P4231 三步必杀 (差分)

    目录 题目 题解 题目 题目链接 题目背景 (三)旧都 离开狭窄的洞穴,眼前豁然开朗. 天空飘着不寻常的雪花. 一反之前的幽闭,现在面对的,是繁华的街市,可以听见酒碗碰撞的声音. 这是由被人们厌恶的鬼 ...

  2. pyhton项目和晋江文学城数据分析项目

     1.图书管理系统 图1.图书管理系统(作者信息列表页面) 图2.图书管理系统(作者信息修改页面) 2.个人博客网页设计 图3.博客(我的日记-->个人日记)页面 图4.博客(关于我--> ...

  3. Java自动生成数据

    最近在造数据库中的表数据,写了些数据生成类 可以随机生成姓名.性别,民族,出生日期,身份证号,手机号,邮箱,身高,文化程度,地址,单位,日期时间,编码等 package com.util.create ...

  4. ContactsUtil 工具类 - 转载

    import java.util.HashMap; import java.util.Map; //http://www.open-open.com/code/view/1432300986802 / ...

  5. 一些随机数据的生成(日期,邮箱,名字,URL,手机号,日期等等)

    直接上代码 import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import jav ...

  6. Java 随机生成中文姓名,手机号,邮编,住址

    package lovo; import java.util.HashMap; import java.util.Map; /** * 随机生成中文姓名,性别,Email,手机号,住址 * @auth ...

  7. (转)Arcgis for javascript实现百度地图ABCD marker的效果

    概述: 在我的博客中,有一篇相关的文章,这段时间,有很多人问我求源码,只是时间过去已长,源代码已找不到,乘着这个9.3放假,又重新实现了下,并相关代码做了优化,在此贴出来,方便大家使用. 相关文章地址 ...

  8. 在java中调用mockjs生成模拟数据

    一.手写版 在前端有个模拟数据的神器 Mock.js 能生成随机数据,拦截 Ajax 请求,然后我觉得他的这个生成随机数据不错.然后我就到度娘一顿操作,没找到类似的java实现,于是就有了下面的代码: ...

  9. [讲解]网络流最大流dinic算法

    网络流最大流算法dinic ps:本文章不适合萌新,我写这个主要是为了复习一些细节,概念介绍比较模糊,建议多刷题去理解 例题:codevs草地排水,方格取数 [抒情一下] 虽然老师说这个多半不考,但是 ...

随机推荐

  1. 关于encodeURIComponent的用法

    定义和用法 encodeURIComponent() 函数可把字符串作为 URI 组件进行编码. 语法 encodeURIComponent(URIstring) 参数  描述  URIstring  ...

  2. 【NOIP2017 DAY1T2】 时间复杂度

    [题目链接] 点击打开链接 [算法] 其实这就是一道模拟题啦! 在判error和计算时间复杂度时,我们需要用栈这种数据结构 [代码] 这题的代码还是有些难写的,写的时候一定要有条理! #include ...

  3. 洛谷P3830 [SHOI2012]随机树——概率期望

    题目:https://www.luogu.org/problemnew/show/P3830 询问1:f[x]表示有x个叶节点的树的叶节点平均深度: 可以把被扩展的点的深度看做 f[x-1] ,于是两 ...

  4. Java的四大基础特性

    Java的四大基础特性 一.抽象 父类为子类提供一些属性和行为,子类根据业务需求实现具体的行为. 抽象类使用abstract进行修饰,子类要实现所有的父类抽象方法否则子类也是抽象类. 二.封装 把对象 ...

  5. Tomcat调整JVM大小,启动闪退

    Tomcat因调整过JVM运存大小,导致闪退:解决方法是: -XX:PermSize -XX:MaxPermSize 值调小些就可以了 set "JAVA_OPTS=-server -Xms ...

  6. E20180424-hm

    thumb n. 拇指; (手套的) 拇指部份; trigger  vt. 引发,触发; 扣…的扳机; 发射或使爆炸(武器或爆炸性弹药);      n. (枪) 扳机; 起动装置,扳柄; 引发其他事 ...

  7. githunb竟然可以识别MQ4

    完全是上班时候突发奇想,没想到能识别.只是没有现成的gitignore

  8. HDOJ5020【几何】

    题意: 给你n个点,问有几对三个点在一条直线上 思路: 目前为止很少写的几何题- 一开始两层for没有判断重复. 然后看了一些题解说排序一下,然后枚举每个点,求一个同一斜率的个数k,ans+=(k-1 ...

  9. python 面向对象十三 枚举类

    from enum import Enum Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', ...

  10. sublime text3 注册码

    —– BEGIN LICENSE —– TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA ...