[BZOJ 1834] [ZJOI2010]network 网络扩容

1834: [ZJOI2010]network 网络扩容

Time Limit: 3 Sec
Memory Limit: 64 MB

Description

给定一张有向图,每条边都有一个容量C和一个扩容费用W。这里扩容费用是指将容量扩大1所需的费用。求: 1、 在不扩容的情况下,1到N的最大流; 2、 将1到N的最大流增加K所需的最小扩容费用。

Input

输入文件的第一行包含三个整数N,M,K,表示有向图的点数、边数以及所需要增加的流量。 接下来的M行每行包含四个整数u,v,C,W,表示一条从u到v,容量为C,扩容费用为W的边。

Output

输出文件一行包含两个整数,分别表示问题1和问题2的答案。

Sample Input

5 8 2
1 2 5 8
2 5 9 9
5 1 6 2
5 1 1 8
1 2 8 7
2 5 4 9
1 2 1 1
1 4 2 1

Sample Output

13 19
30%的数据中,N<=100
100%的数据中,N<=1000,M<=5000,K<=10

HINT

Source

Day1

【题解】

网络流啊TAT 每次都是数组开小啊

这道题第一问就是直接dinic最大流

第二问就是在做费用流的时候求出的解是满足最大流情况下的解。设第一问的最大流是ANS,要扩容K,有可能在加了新边后最大流大于ANS+K。这样费用可能不是最小的。因此我们可以在1号或N号点新增一条边,容量是K,费用是0。这样就限制了最大流。

  1 #include <stdio.h>
  2 #include <queue>
  3 #include <string.h>
  4 using namespace std;
  5 const int B=30010;
  6 const int INF=2139062143;
  7 int next[B], head[B], to[B], flow[B], w[B], c[B], oq[B];
  8 int pre[B], cnt=-1, bi[B], n, m, k, ans=0, d[B];
  9 bool vis[B];
 10 int u[B], v[B], _f[B], _w[B];
 11 queue <int> q;
 12 inline void add(int u,int v,int flo,int _w) {
 13     cnt++; to[cnt]=v; next[cnt]=head[u];    head[u]=cnt; flow[cnt]=flo; w[cnt]=_w;
 14 }
 15 inline int min(int a,int b) {return a<b?a:b;}
 16 inline void G(int &x) {
 17     int y=0, yy=1; char ch=getchar();
 18     while(ch<'0'||ch>'9') {
 19         if(ch=='-') yy=-1;
 20         ch=getchar();
 21     }
 22     while(ch>='0'&&ch<='9') {
 23         y=(y<<1)+(y<<3)+ch-'0';
 24         ch=getchar();
 25     }
 26     x=y*yy;
 27 }
 28 inline void qclear() {
 29     while(!q.empty()) q.pop();
 30 }
 31 inline bool getdfn() {
 32     qclear();
 33     memset(c,-1,sizeof(c));
 34     q.push(1); c[1]=1;
 35     while(!q.empty()) {
 36         int top=q.front();
 37         q.pop();
 38         for (int i=head[top];i>=0;i=next[i]) {
 39             int t=to[i];
 40             if(c[t]>=0||flow[i]==0) continue;
 41             c[t]=c[top]+1;
 42             q.push(t);
 43             if(t==n) return 1;
 44         } 
 45     }
 46     return 0;
 47 }
 48 int dinic(int x,int low) {
 49     if(x==n) return low;
 50     int flo,r=low;
 51     for (int i=head[x];i>=0;i=next[i]) {
 52         int t=to[i], fl=flow[i];
 53         if(c[t]!=c[x]+1 || fl==0) continue;
 54         flo=dinic(t,min(r,fl));
 55         r-=flo;
 56         flow[i]-=flo;
 57         flow[i^1]+=flo;
 58         if(!r) return low;
 59     }
 60     if(r==low) c[x]=-1;
 61     return low-r;
 62 }
 63 inline bool spfa() {
 64     memset(vis,0,sizeof(vis));
 65     memset(oq,0,sizeof(oq));
 66     memset(d,0X7f,sizeof(d));
 67     qclear();
 68     vis[1]=1; d[1]=0; q.push(1);
 69     while(!q.empty()) {
 70         int top=q.front(); q.pop();
 71         vis[top]=0; oq[top]++;
 72         if(oq[top]>n) return 0;
 73         for (int i=head[top];i>=0;i=next[i]) {
 74             if(flow[i]&&d[top]+w[i]<d[to[i]]) {
 75                 d[to[i]]=d[top]+w[i];
 76                 pre[to[i]]=i;
 77                 if(!vis[to[i]]) {
 78                     vis[to[i]]=1;
 79                     q.push(to[i]);
 80                 }
 81             }
 82         }
 83     }
 84     if(d[n]==INF) return 0;
 85     return 1;
 86 }
 87 inline void mincostflow() {
 88     int s=INF;
 89     for (int i=pre[n];i>=0;i=pre[to[i^1]]) {
 90         s=min(s,flow[i]);
 91         if(to[i^1]==1) break;
 92     }
 93     for (int i=pre[n];i>=0;i=pre[to[i^1]]) {
 94         flow[i]-=s;
 95         flow[i^1]+=s;
 96         ans+=s*w[i];
 97         if(to[i^1]==1) break;
 98     }
 99 }
100 int main() {
101     G(n), G(m), G(k);
102     memset(head,-1,sizeof(head));
103     for (int i=1;i<=m;++i) {
104         G(u[i]), G(v[i]), G(_f[i]), G(_w[i]);
105         add(u[i],v[i],_f[i],0);
106         add(v[i],u[i],0,0);
107     }
108     int _flowx=0;
109     while(getdfn()) _flowx += dinic(1,INF);
110     printf("%d ",_flowx);
111     for (int i=1;i<=m;++i) {
112         add(u[i],v[i],INF,_w[i]);
113         add(v[i],u[i],0,-_w[i]);
114     }
115     add(n,n+1,k,0); add(n+1,n,0,0);
116     ++n;
117     while(spfa()) mincostflow();
118     printf("%d\n",ans);
119     return 0;
120 }
View Code

 

转载于:https://www.cnblogs.com/TonyNeal/p/bzoj1834.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397891.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fw150us的linux驱动下载,迅捷FW150US1.0/2.0无线网卡驱动

迅捷FW150US1.0/2.0无线网卡驱动官方版是迅捷推出的一款超小型150M无线USB网卡&#xff0c;安装迅捷FW150US1.0/2.0无线网卡驱动官方版&#xff0c;即可正常连接电脑使用。迅捷FW150US1.0/2.0无线网卡驱动支持自动检测功能&#xff0c;能够自动调整速率&#xff0c;无线传输速率…

20160811

一&#xff1a;边框样式 1.边框线 border-style : none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset 例&#xff1a;div { width:300px; height:100px; border-style:solid; &#xff5d; border-top-style 设置上边框线 border-bott…

vip地址能ping不通_电脑高手必备ping和netstat命令

1、Ping的基础知识ping命令相信大家已经再熟悉不过了&#xff0c;但是能把ping的功能发挥到最大的人却并不是很多&#xff0c;当然我也并不是说我可以让ping发挥最大的功能&#xff0c;我也只不过经常用ping这个工具&#xff0c;也总结了一些小经验&#xff0c;现在和大家分享一…

linux   图片

转载于:https://blog.51cto.com/wzsts/1837102

array python 交集_Python基础(二)——列表和元组

Python中最基本的数据结构是序列&#xff0c;序列中的每一个元素都有编号&#xff0c;即索引&#xff08;从左到右第一个索引为0&#xff0c;从右到左第一个索引为-1&#xff09;。python提供的序列类型在所有程序设计语言中是最丰富、最灵活&#xff0c;也是功能最强大的。pyt…

浅谈PHP+Access数据库的连接 注意要点

今天公司需要用php连接access 数据库&#xff0c;结果整了半天Access数据库 就是连接不上&#xff0c;查找 很多资料&#xff0c;以下是我的经验&#xff0c; -.- 希望能给需要连接access 数据的人带来帮助。。-.- 需要注意&#xff1a; 安装access 数据库的时候 需要安装与本…

lua 字符串分割_Lua函数式编程(中)

书接前文&#xff0c;我们继续慢慢的了解 所谓的函数式编程思想。考查下面的例子判断给定的数是否是偶数 在Lua里面这似乎是个幼儿园问题local isEven function(v) return v % 2 0 end但我们如何用函数式的思维去解决问题&#xff1f;是的&#xff0c;假设我们有了以下函数R.…

WCF技术剖析之二十七: 如何将一个服务发布成WSDL[基于HTTP-GET的实现](提供模拟程序)...

WCF技术剖析之二十七: 如何将一个服务发布成WSDL[基于HTTP-GET的实现]&#xff08;提供模拟程序&#xff09; 原文:WCF技术剖析之二十七: 如何将一个服务发布成WSDL[基于HTTP-GET的实现]&#xff08;提供模拟程序&#xff09;基于HTTP-GET的元数据发布方式与基于WS-MEX原理类似…

)标识符不能是c语言的关键字,标识符不能是C的关键字

满意答案tftgcl882014.08.07采纳率&#xff1a;58% 等级&#xff1a;9已帮助&#xff1a;3967人所谓关键字就是已被Turbo C2.0本身使用&#xff0c; 不能作其它用途使用的字。例如关键字不能用作变量名、函数名等。Turbo C2.0有以下关键字:Turbo C2.0扩展的共11个asm …

不同类的方法 事务问题_【高中地理】描述类问题的答题方法

一、描述地理位置的特征及意义位置&#xff1a;半球位置、纬度位置、海陆位置、相对位置&#xff08;邻省或邻国、地形区、地势阶梯交界处、气候区、图例中的特殊地理事物&#xff09;、板块位置、交通位置等。意义&#xff1a;①所处位置&#xff08;是否是重要分界线&#xf…

Debian 系统安装 Nagios 服务器监控端

安装apt-get updateapt-get install nagios* perlapt-get install --no-install-recommends pnp4nagiosapt-get install apache2 apache2-utils php5 php-pear 修改npcd设置# vim /etc/default/npcdRun"yes"# service npcd start 添加process_perfdata.pl执行权限ch…

spark-stream 访问 Redis

最近在spark-stream上写了一些流计算处理程序&#xff0c;程序架构如下 程序运行在Spark-stream上&#xff0c;我的目标是kafka、Redis的参数都支持在启动时指定。 在写代码时参考了这篇文章 https://www.iteblog.com/archi...&#xff0c;该文讲的比较清楚&#xff0c;但是有两…

东软睿云用户认证_【硬件资讯】尘埃落定!11代酷睿规格曝光!i7、i9难分差距,退回8核16线程!...

新闻①&#xff1a;Intel第11代酷睿处理器规格曝光&#xff0c;旗舰i9-11900K与i7-11700K同为8核16线程Intel的代号为Rocket Lake-S的第11代酷睿台式机CPU阵容将于明年推出&#xff0c;其中四个型号的规格现已曝光。拥有8个Cypress Cove核心、5.3GHz、PL2功耗限制250W的酷睿i9-…

环上的游戏

环上的游戏&#xff08;cycle&#xff09;有一个取数的游戏。初始时&#xff0c;给出一个环&#xff0c;环上的每条边上都有一个非负整数。这些整数中至少有一个0。然后&#xff0c;将一枚硬币放在环上的一个节点上。两个玩家就是以这个放硬币的节点为起点开始这个游戏&#xf…

python基础课程_2学习笔记3:图形用户界面

图形用户界面 丰富的平台 写作Python GUI程序前&#xff0c;须要决定使用哪个GUI平台。 简单来说&#xff0c;平台是图形组件的一个特定集合。能够通过叫做GUI工具包的给定Python模块进行訪问。工具包 描写叙述 Tkinter 使用Tk平台。非常easy得到。半标准。 wxpython 基于…

idea ssm打war包_IDEA下从零开始搭建SpringBoot工程

SpringBoot的具体介绍可以参看其他网上介绍&#xff0c;这里就不多说了&#xff0c;就这几天的学习&#xff0c;个人理解&#xff0c;简而言之&#xff1a;如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring&#xff0c;MyBatis&#xff0c;Netty源码分析的朋友…

dataframe 众数的方法_学习数据分析数据方法论 [描述性统计分析]

数理统计&#xff1a;数理统计是以概率论为基础&#xff0c;研究社会和自然界中大量随机现象数量变化基本规律的一种方法。分为&#xff1a;描述统计(描述统计的任务是搜集资料&#xff0c;进行整理、分组&#xff0c;编制次数分配表&#xff0c;绘制次数分配曲线&#xff0c;计…

c语言高级语言期中测试答案,上海理工大学C语言2011期中试题和答案

C语言2010/2011学年 第二学期 期中测试高级语言程序设计(C)试卷 A □BA1. 输入一行字符&#xff0c;统计其中的英文字母个数。#include void main(){ char ch;int n0;printf(“Input a string:\n”);while(1){ chgetchar();if (ch \n ) break;if (ch> a && ch< z…

如何构建ASP.NET MVC4JQueryAJaxJSon示例

背景&#xff1a; 博客中将构建一个小示例&#xff0c;用于演示在ASP.NET MVC4项目中&#xff0c;如何使用JQuery Ajax。 直接查看JSon部分 步骤&#xff1a; 1&#xff0c;添加控制器(HomeController)和动作方法(Index),并为Index动作方法添加视图(Index.cshtml),视图中HTML如…

echarts 有引导线和内部文字_点、线、面构图的异同以及相互转化

点、线、面构图既有相似性&#xff0c;又有差异性。相似的是都有对齐、强调、群组、重复、突出层次的作用&#xff0c;不同的是点的特点是聚焦、线的特点是运动和方向性&#xff0c;面的特性是体量感、稳定性。点的情感最弱&#xff0c;线、面的情感要比点丰富。一、点、线、面…