codevs 1422 河城荷取
在幻想乡,河城荷取是擅长高科技工业的河童。荷取的得意之作除了光学迷彩外,还有震动整个幻想乡的巨型人形『非想天则』。不过由于人形太过巨大,所以为它充能是一件很麻烦的事。人形一共有N个电能池,编号1..N。其中前L个电能池(即编号为1..L的电能池)连接着外部充能接口,而编号为N的电能池连接着动力炉核心。在N个蓄能池之间有M条单向管道,每条管道有一个激活代价cost和电能传输极限limit。当激活度达到某个值时,所以激活代价小于等于这个值的管道都会被激活,但是每一条管道只能够最多传送limit个单位的电能。外部接口到电能池和电能池到动力炉核心的管道传输没有限制并且激活代价为0。现在荷取想往动力炉核心输入至少K个单位的电能,求需要的最小激活度。
第1行:4个正整数N,M,L, K
第2..M行: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
提示
样例解释:
当激活度为4时,除了(2,4)外其他管道都能够使用。此时能够输入恰好4个单位电能。具体如下:
(1,4) 输送2个单位电力
(4,6) 输送2个单位电力
(3,5) 输送2个单位电力
(5,6) 输送2个单位电力
注意:
保证任意(u,v)都只出现一次。
#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 河城荷取的更多相关文章
- Luogu P4231 三步必杀 (差分)
目录 题目 题解 题目 题目链接 题目背景 (三)旧都 离开狭窄的洞穴,眼前豁然开朗. 天空飘着不寻常的雪花. 一反之前的幽闭,现在面对的,是繁华的街市,可以听见酒碗碰撞的声音. 这是由被人们厌恶的鬼 ...
- pyhton项目和晋江文学城数据分析项目
1.图书管理系统 图1.图书管理系统(作者信息列表页面) 图2.图书管理系统(作者信息修改页面) 2.个人博客网页设计 图3.博客(我的日记-->个人日记)页面 图4.博客(关于我--> ...
- Java自动生成数据
最近在造数据库中的表数据,写了些数据生成类 可以随机生成姓名.性别,民族,出生日期,身份证号,手机号,邮箱,身高,文化程度,地址,单位,日期时间,编码等 package com.util.create ...
- ContactsUtil 工具类 - 转载
import java.util.HashMap; import java.util.Map; //http://www.open-open.com/code/view/1432300986802 / ...
- 一些随机数据的生成(日期,邮箱,名字,URL,手机号,日期等等)
直接上代码 import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import jav ...
- Java 随机生成中文姓名,手机号,邮编,住址
package lovo; import java.util.HashMap; import java.util.Map; /** * 随机生成中文姓名,性别,Email,手机号,住址 * @auth ...
- (转)Arcgis for javascript实现百度地图ABCD marker的效果
概述: 在我的博客中,有一篇相关的文章,这段时间,有很多人问我求源码,只是时间过去已长,源代码已找不到,乘着这个9.3放假,又重新实现了下,并相关代码做了优化,在此贴出来,方便大家使用. 相关文章地址 ...
- 在java中调用mockjs生成模拟数据
一.手写版 在前端有个模拟数据的神器 Mock.js 能生成随机数据,拦截 Ajax 请求,然后我觉得他的这个生成随机数据不错.然后我就到度娘一顿操作,没找到类似的java实现,于是就有了下面的代码: ...
- [讲解]网络流最大流dinic算法
网络流最大流算法dinic ps:本文章不适合萌新,我写这个主要是为了复习一些细节,概念介绍比较模糊,建议多刷题去理解 例题:codevs草地排水,方格取数 [抒情一下] 虽然老师说这个多半不考,但是 ...
随机推荐
- 编译含有Servlet的java文件
直接在命令行方式下用javac HelloWorld.java编译HellowWorld Servlet是不行的,因为Java SE JDK不含Servlet类库. 解决方法:在环境变量CLASSPA ...
- 【BZOJ 3884】 上帝与集合的正确用法
[题目链接] 点击打开链接 [算法] 通过欧拉拓展定理,列出递推公式 [代码] #include<bits/stdc++.h> using namespace std; typedef l ...
- javaScript的几个问题简答
1.javascript的typeof返回哪些数据类型 Object.number. function. boolean. underfind 2.例举3种强制类型转换和2种隐式类型转换? ...
- Codechef LOCAUG17
做完题目很少有写题解的习惯,强行PO一组吧. 比赛链接:https://www.codechef.com/LOCAUG17 PRINCESS 给定字符串s,问s是否存在长度大于1的回文子串. 解:分两 ...
- Hibernate 4.3 配置文件实现
1.建立web项目 2.复制相关的jar文件到 项目的lib目录下antlr-2.7.7.jardom4j-1.6.1.jarhibernate-commons-annotations-4.0.5.F ...
- Vue HTML5 History 模式
vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载. 如果不想要很丑的 hash,我们可以用路由的 his ...
- Table View Programming Guide for iOS---(七)---Managing Selections
Managing Selections 管理选择 When users tap a row of a table view, usually something happens as a result ...
- ORACLE PL/SQL 实例精解之第一章 PL/SQL概念
1.传统一层一层传数据,而PLSQL作为独立的单元返回客户端,减少查询,减少网路传输的往返,高效 2.PL/SQL语句块 分为两种:命名(子程序,函数,包保存在数据库中,后期可以根据名称进行引用),匿 ...
- 与adb相关的问题,比如掉线问题、Android Studio 提示Session 'app':Error Installing APK、找不到设备
这一篇帖子 会写的比较简单 不过相信大家也可能遇到这些问题 为了怕自己忘记 记录下来 顺便也和大家一起分享 描述:在一些机型上安装软件 提示卸载原先的软件 但是又安装不上新软件 DELETE ...
- PTA 2-1 列出连通集【DFS+BFS基础】
给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点. 输入格式: 输入第1 ...