codevs 1422 河城荷取

时间限制: 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=0;bool f=0;
    char ch=getchar();
    for(;ch>‘9‘||ch<‘0‘;ch=getchar()) if(ch==‘-‘) f=1;
    for(;ch>=‘0‘&&ch<=‘9‘;ch=getchar()) x=x*10+ch-‘0‘;
    x=f?(~x)+1:x;
}
struct Edge
{
    int next,to,flow;
    Edge (int next=0,int to=0,int flow=0) :next(next),to(to),flow(flow){}
}edge[M<<1];
int S,T,u[M],v[M],lim[M],cost[M],n,m,l,k,dep[N],head[N<<1],cnt=1;
void insert(int u,int v,int w)
{
    edge[++cnt]=Edge(head[u],v,w);
    head[u]=cnt;
}
void build(int x)
{
    memset(head,0,sizeof(head));
    memset(edge,0,sizeof(edge));
    cnt=1;
    for(int i=1;i<=m;i++)
    {
        if(cost[i]<=x)
        {
            insert(u[i],v[i],lim[i]);
            insert(v[i],u[i],0);
        }
    }
    for(int i=1;i<=l;i++)
    {
        insert(S,i,INF);
        insert(i,S,0);
    }
}
bool bfs()
{
    memset(dep,-1,sizeof(dep));
    queue<int>q;
    q.push(S);
    dep[S]=0;
    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]==-1&&edge[i].flow)
            {
                dep[v]=dep[Top]+1;
                q.push(v);
            }
        }
    }
    if(dep[T]>0) return true;
    else return false;
}
int dfs(int now,int t,int came_flow)
{
    int f,rest=0;
    if(now==t||came_flow==0) return came_flow;
    for(int i=head[now];i;i=edge[i].next)
    {
        int v=edge[i].to;
        if(dep[v]==dep[now]+1&&edge[i].flow&&(f=dfs(v,t,min(came_flow,edge[i].flow))))
        {
            rest+=f;
            came_flow-=f;
            edge[i].flow-=f;
            edge[i^1].flow+=f;
            if(came_flow==0) return rest;
        }
    }
    if(rest==0) dep[now]=INF;
    return rest;
}
int dinic()
{
    int ans=0;
    for(;bfs();ans+=dfs(S,T,INF));
    return ans;
}
int main()
{
    read(n);
    read(m);
    read(l);
    read(k);
    S=n+1,T=n;
    for(int i=1;i<=m;i++)
    {
        read(u[i]);
        read(v[i]);
        read(lim[i]);
        read(cost[i]);
    }
    int l=-1,r=1000000;
    while(r-l>1)
    {
        int mid=(l+r)>>1;
        build(mid);
        if(dinic()>=k)
            r=mid;
        else l=mid;
    }
    printf("%d",r);
    return 0;
}
时间: 2024-10-18 12:42:48

codevs 1422 河城荷取的相关文章

题解 P4277 【河城荷取的烟花】

学校的一场考试: 点进去你也无法登陆的传送门 技能比拼,分组方案,勇士的篝火 1.国王要嫁女儿啦!OI村庄里的勇士们都想去试试,但是(不好的事都叫但是)...... 2.经过OI村子里的内部选拔,很多勇士都获得了村长的青睐,村长为了...... 3.OI村庄的勇士如愿娶了国王女儿,村长打算...... 讲了由村长暗箱操作让一群QIER勇士娶一位公主的故事 由情节就能看出数据水的一批 [河城荷取的烟花]的情节就美了很多 T3中出现了一个美观扭曲的图片: 题意: 现需燃尽一摊奇怪的绳子(学校里是木棍

[CODEVS 1043] Noip 2000 方格取数

1043 方格取数 时间限制: 1s  空间限制: 128000 KB 题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.如下图所示(见样例): 某人从图的左上角的A 点出发,可以向下行走,也可以向右走,直到到达右下角的B点.在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0). 此人从A点到B 点共走两次,试找出2条这样的路径,使得取得的数之和为最大. 输入描述 Input Description 输入的

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734

P4231 三步必杀

P4231 三步必杀 题目背景 (三)旧都 离开狭窄的洞穴,眼前豁然开朗. 天空飘着不寻常的雪花. 一反之前的幽闭,现在面对的,是繁华的街市,可以听见酒碗碰撞的声音. 这是由被人们厌恶的鬼族和其他妖怪们组成的小社会,一片其乐融融的景象. 诶,不远处突然出现了一些密密麻麻的小点,好像大颗粒扬尘一样. 离得近了点,终于看清楚了. 长着角的鬼们聚在一起,围观着另一只鬼的表演. 那”扬尘”,其实都是弹幕. 勇仪的招数之一,三步之内,所到之处弹幕云集,几乎没有生存可能. 为了强化这一技能,勇仪将对着一排柱

《呼兰河传》读后感 萧红

<呼兰河传>是萧红的一部自传式的长篇小说,描述她幼年记忆中故乡呼兰河城的风土人情和民间故事.小说第一章写呼兰河的自然环境和小镇概貌,像画卷式的展开镇上主要的大街.胡同.店铺,以及人们相应的"卑琐平凡的实际生活";第二章写承载人们精神寄托的民间风俗,比如跳大神.常秧歌.放河灯.野台子戏.四月十八娘娘庙大会;第三.四章写作者小时候家里的后院景象以及与祖父的短暂生活;第五章一向到结尾分别写了老胡家的团圆媳妇.有二伯.冯歪嘴子几个人物的故事. "严冬一封锁了大地的时候,则

[从头读历史] 第263节 左传 [BC537至BC479]

剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入元婴期的修炼后,日夜苦修,神通日进. 这日,忽然想起自己虽然神通大涨,却在人文涵养上始终无有寸进,不觉挂怀. 在和[工程师阿伟]商议后,决定先理清文史脉络,打通文史经穴.于是,便有了这部 [从头读历史]的修炼史. 正剧开始: 星历2016年06月21日 15:55:12, 银河系厄尔斯星球中华帝国江南行省. [工程师阿伟]正在和[机器小伟]一起研究[左传 [BC537至BC479]]. 继续读<左传> 这首<七月>,其实里面把冬月

汉之星教学平台 常用字2500

阿啊哎哀唉埃挨癌矮艾爱碍安氨俺岸按案暗昂凹熬傲奥澳 八巴叭吧拔把坝爸罢霸白百柏摆败拜班般颁斑搬板版办半伴扮瓣邦帮膀傍棒包胞宝饱保堡报抱豹暴爆卑杯悲碑北贝备背倍被辈奔本崩蹦逼鼻比彼笔币必毕闭辟碧蔽壁避臂边编蝙鞭扁便变遍辨辩辫标表别宾滨冰兵丙柄饼并病拨波玻剥脖菠播伯驳泊勃博搏膊薄卜补捕不布步部 擦猜才材财裁采彩踩菜蔡参餐残蚕惨灿仓苍舱藏操曹槽草册侧测策层叉插查茶察差拆柴缠蝉产阐颤昌长肠尝偿常厂场敞畅倡唱抄超巢朝潮吵炒车扯彻撤尘臣沉陈晨闯衬称趁撑成呈承诚城乘惩程橙吃池驰迟持匙尺齿斥赤翅充冲虫崇抽仇绸愁

长征十一号成功发射一箭六星 年底有望在海上起飞

地将军长枪一指喝道无知小辈安敢犯吾帝国边境而杀这个怪物耗费的时间也只不过两三分钟而已这样的升级速度绝对要比在英雄墓园刷骸骨魔要更快一些打开一看遗世的古老卷轴神级物品任务卷轴开启需要等级级得到了凌雪帮助冰茶压力稍减但是隐藏在黑暗中的刺客却依然让两个很是头疼 不到三秒钟的时间血饮天下已经翻身而起一脸恼羞成怒的样子手持阔剑便打出了二连击横扫千军+裂地斩 当然看了看场边这个人正在于很萌很好推聊天是兄弟会的人看起来脸上满是稚气嗯其实很挺帅一身的肌肉疙瘩吃完饭后回到房间就沉沉的睡了过去 不到三分钟的时间任意

JDBC?弱爆了,看看轻量级的 Mybatis FreeStyle

在网络层,互联网提供所有应用程序都要使用的两种类型的服务,尽管目前理解这些服务的细节并不重要,但在所有TCP/IP概述中,都不能忽略他们: 无连接分组交付服务(Connectionless Packet Delivery Service) 无连接交付抽象地表示大多数分组交换网络都能提供的一种服务.简单地讲,指的是TCP/IP灰暗网按照报文上携带的地址信息把短报文从一台机器传递到另一台机制.因为无连接服务单独传递每个分组,所以不能保证可靠.有序地传递.而且,由于无连接服务通常直接映射到底层的硬件上