[BZOJ1834][ZJOI2010]network 网络扩容 最大流+费用流

1834: [ZJOI2010]network 网络扩容

Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 3330  Solved: 1739 [Submit][Status][Discuss]

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
对于第一问,我们直接跑网络流。
对于第二问,我们先建一个超级源,从这个超级源向1连一条容量为k,费用为0的边。
之后对于原图的每一条边,建一条容量无限的边,跑最小费用最大流即可。
  1 #include<iostream>
  2 #include<cstring>
  3 #include<cstdio>
  4 #include<cstdlib>
  5 #include<cmath>
  6 #include<algorithm>
  7 #define maxm 5005
  8 #define maxn 1005
  9 using namespace std;
 10 struct data {
 11     int from,to,next,w,c;
 12 }e[maxm*4];
 13 int head[maxn],cnt;
 14 void add(int u,int v,int w,int c){e[cnt].from=u;e[cnt].next=head[u];e[cnt].to=v;e[cnt].w=w;e[cnt].c=c;head[u]=cnt++;}
 15 int n,m,k;
 16 int q[maxn];
 17 bool vis[maxn];
 18 int dis[maxn];
 19 bool bfs() {
 20     memset(dis,-1,sizeof(dis));
 21     int h=0,t=1;
 22     q[h]=1;
 23     vis[1]=1;
 24     dis[1]=0;
 25     while(h!=t) {
 26         int now=q[h];h++;vis[now]=0;if(h==1000) h=0;
 27         for(int i=head[now];i>=0;i=e[i].next) {
 28             int to=e[i].to;
 29             if(e[i].w&&dis[to]<0) {
 30                 dis[to]=dis[now]+1;
 31                 if(!vis[to]){
 32                     vis[to]=1;
 33                     q[t++]=to;if(t==1000)t=0;
 34                 }
 35             }
 36         }
 37     }
 38     return dis[n]!=-1;
 39 }
 40 int dfs(int now,int a) {
 41     if(now==n||a==0) return a;
 42     int flow=0,f;
 43     for(int i=head[now];i>=0;i=e[i].next) {
 44         int to=e[i].to;
 45         if(dis[to]==dis[now]+1&&e[i].w>0) {
 46             f=dfs(to,min(a,e[i].w));
 47             e[i].w-=f;
 48             e[i^1].w+=f;
 49             flow+=f;
 50             a-=f;
 51             if(a==0) return flow;
 52         }
 53     }
 54     if(!flow) dis[now]=-1;
 55     return flow;
 56 }
 57 void work1() {
 58     int ans=0;
 59     while(bfs()){ans+=dfs(1,2147483647);}
 60     printf("%d ",ans);
 61 }
 62 int cost=0;
 63 bool spfa() {
 64     for(int i=0;i<=n;i++) dis[i]=-1000000000; 
 65     int h=0,t=1;
 66     q[h]=n;
 67     vis[n]=1;
 68     dis[n]=0;
 69     while(h!=t) {
 70         int now=q[h];h++;vis[now]=0;if(h==1000) h=0;
 71         for(int i=head[now];i>=0;i=e[i].next) {
 72             int to=e[i].to;
 73             if(e[i^1].w&&dis[to]<dis[now]+e[i].c) {
 74                 dis[to]=dis[now]+e[i].c;
 75                 if(!vis[to]){
 76                     vis[to]=1;
 77                     q[t++]=to;if(t==1000)t=0;
 78                 }
 79             }
 80         }
 81     }
 82     cost-=dis[0];
 83     return dis[0]!=-1000000000;
 84 }
 85 int ans2;
 86 int zkw(int now,int a) {
 87     if(now==n||a==0){ans2+=cost*a;return a;}
 88     int flow=0,f;vis[now]=1;
 89     for(int i=head[now];i>=0;i=e[i].next) {
 90         int to=e[i].to;
 91         if(dis[to]==dis[now]+e[i].c&&e[i].w>0&&!vis[to]&&(f=zkw(to,min(a,e[i].w)))) {
 92             e[i].w-=f;
 93             e[i^1].w+=f;
 94             flow+=f;
 95             a-=f;
 96             if(a==0) break;
 97         }
 98     }
 99     return flow;
100 }
101 void build() {
102     int t=cnt;
103     for(int i=0;i<t;i+=2) {
104         add(e[i].from,e[i].to,1147483647,e[i].c);
105          add(e[i].to,e[i].from,0,-e[i].c);
106     }
107     add(0,1,k,0);
108     add(1,0,0,0);
109     for(int i=0;i<t;i++) e[i].c=0;
110 }
111 void work2() {
112     ans2=0;cost=0;
113     build();
114     memset(vis,0,sizeof(vis));
115     while(spfa()) {
116         do {
117             memset(vis,0,sizeof(vis));
118         }while(zkw(0,2147483647));
119         memset(vis,0,sizeof(vis));cost=0;
120     }
121     printf("%d",ans2);
122 }
123 int main() {
124     memset(head,-1,sizeof(head));
125     scanf("%d%d%d",&n,&m,&k);
126     for(int i=1;i<=m;i++) {
127         int u,v,w,c;
128         scanf("%d%d%d%d",&u,&v,&w,&c);
129         add(u,v,w,c);add(v,u,0,-c);
130     }
131     work1();
132     work2();
133 }
View Code

 

转载于:https://www.cnblogs.com/wls001/p/7678966.html

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

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

相关文章

oracle备份密码文件,[数据库]Oracle数据库备份dmp文件,使用cmd命令导入导出步骤,以及忘记Oracle密码_星空网...

Oracle数据库备份dmp文件&#xff0c;使用cmd命令导入导出步骤,以及忘记Oracle密码2013-07-300dmp文件导入导出步骤1.创建表空间--datafile 的路径随便给&#xff0c;但是后面的文件命名用dbfCREATE TABLESPACE DTBSLOGGINGDATAFILE D:\OracleDateFile\DTBS.DBF SIZE 32MAUTOEX…

python需要花钱下载吗_用Python下载知乎视频,非常实用

原标题&#xff1a;用Python下载知乎视频&#xff0c;非常实用Python下载知乎视频。 # -*- coding: utf-8 -*- """ 下载知乎视频&#xff1a; 依赖&#xff1a; pip install requests mac 安装 ffmpeg: brew install ffmpeg """ import re impor…

php instanceof 基类,PHP强制对象类型之instanceof操作符

一、简介在php(做为现在的主流开发语言)中实现强制对象类型有时可能非常重要。如果缺少了它&#xff0c;或是因为缺乏这方面的知识——基于不正确的编程假设&#xff0c;或者仅仅是由于懒惰&#xff0c;那么你会在特定的Web应用程序中看到你所不希望的结果。特别是当用php(做为…

msyql备份还原

MySQL备份和还原,都是利用mysqldump、mysql和source命令来完成的。 1.Win32下MySQL的备份与还原 1.1 备份 开始菜单 | 运行 | cmd |利用“cd \Program Files\MySQL\MySQL Server 5.0\bin”命令进入bin文件夹 | 利用“mysqldump -u 用户名 -p databasename >exportfilename”…

python相比于excel的优势_对照Excel使用Python进行数据分析,更快掌握

Excel和Python&#xff0c;作为数据分析的主流工具&#xff0c;在从效率提升到数据商业化的整个过程中&#xff0c;都起到了重要作用。不管是在Excel中通过鼠标点选实现&#xff0c;亦或是利用Python通过代码实现&#xff0c;数据分析中的很多基础功能都是相通的。 在数据量级大…

oraoledb.oracle 12c,关于OraOLEDB.Oracle找不到驱动问题的一种可能解决方案

如果安装Oracle的时候没有把Oracle Provider for OLE DB&#xff0c;这个组件安装上&#xff0c;那么就会导致在使用程序的时候无法使用Oracle客户端驱动问题&#xff0c;弥补的办法就是重新下载客户端程序。以下介绍win 2008 x64 Oracle 11g x64情况搭建安装驱动程序首先得下…

python二维图颜色函数_Python scipy的二维图像卷积运算与图像模糊处理操作示例

本文实例讲述了Python scipy的二维图像卷积运算与图像模糊处理操作。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 二维图像卷积运算 一 代码 import numpy as np from scipy import signal, misc import matplotlib.pyplot as plt image misc.ascent()#二维图像数组…

linux命令行大全 笔记,《Linux命令行大全》读书笔记

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;shell就是一个程序&#xff0c;它接受从键盘输入的命令&#xff0c;然后把命令传递给操作系统执行。当使用图像用户界面时&#xff0c;我们需要一个叫做终端仿真器…

dedecms 添加,编辑文章时 文章标题有字数限制的解决办法。

百度上说 解决方法有两步&#xff1a; 一、先要在系统参数下的其他选项中修改文档标题最大长度&#xff08;如修改为150&#xff09;&#xff0c; 后台系统 - 其它选项 - 文档标题最大长度 默认的是60改为150&#xff0c; 二、修改默认参数后&#xff0c;需要手工修改数据表。 …

python绘制散点图、如何选两列作为横坐标_在matplotlib散点图(水平杆图)中从x=0到数据点绘制水平线...

考虑以下情节&#xff1a;由此函数生成&#xff1a;def timeDiffPlot(dataA, dataB, savetoNone, legNone): labels list(dataA["graph"]) figure(figsizescreenMedium) ax gca() ax.grid(True) xi range(len(labels)) rtsA dataA["running"] / 1000.0…

linux命令基础知识 管道流,linux基础知识-I/O重定向,管道(示例代码)

系统设定默认输出设备&#xff1a;标准输出&#xff0c;STDOUT, 1默认输入设备&#xff1a;标准输入, STDIN, 0标准错误输出&#xff1a;STDERR, 2标准输入&#xff1a;键盘标准输出和错误输出&#xff1a;显示器I/O重定向&#xff1a;Linux:>: 覆盖输出[[email protected] …

自动轮播与按钮的联动

将自动轮播与按钮结合起来&#xff0c;就是多写了好几行&#xff0c;挺好看的不过&#xff0c;留下 z1; l.eq(0).css("background-color","orange"); function move(){ if(z!3){ bo.stop(); bo.animate({marginLeft:z*(-680)"px"}, 500, functio…

python运行命令_Python中执行外部命令

有很多需求需要在Python中执行shell命令、启动子进程&#xff0c;并捕获命令的输出和退出状态码&#xff0c;类似于Java中的Runtime类库。 subprocess模块的使用&#xff1a; Python使用最广泛的是标准库的subprocess模块&#xff0c;用来替换os.system(),os.spawn*(),os.popen…

linux多选项菜单脚本,linux shell 编写菜单脚本事例

menu2文件代码&#xff1a;---#!/bin/sh#menu2#Main menu script#ignore ctrl-c and QUIT interruptstrap "" 2 3 15MYDATEdate %d/%m/%YTHIS_HOSThostname -sUSERwhoami#user level fileUSER_LEVELSpriv.user#hold fileHOLD1hold1.$$#colour functionfunction colou…

python简单爬虫入门一_Python爬虫快速入门:基本结构简单实例

本爬虫系列入门教程假设读者仅有一点点Python基础或者近乎为零的基础。如果是有Python基础的可以跳过一些对于Python基本知识的补充。 爬虫能干什么呢&#xff1f;一句话概括&#xff0c;正常通过浏览器可以获取的数据&#xff0c;爬虫都可以获取。这句话可以说是包罗万象。一是…

Windows下rocketmq mqnamesrv.exe 启动成功,但是mqbroker.exe启动失败

1、mqnamesrv.exe启动成功 2、启动mqbroker.exe失败 解决办法&#xff0c;删除C:\Users\"当前系统用户名"\store下的所有文件&#xff0c;就可以了转载于:https://www.cnblogs.com/roujingchuxia/p/7685796.html

python加入中小学课程_通知:中小学将新增一门课!对2008-2013年出生的孩子影响最大!...

很多家长都在发愁&#xff1a; “现在孩子竞争这么激烈&#xff0c;奥数、外语、舞蹈、钢琴...样样都行&#xff0c;我该让孩子学点什么&#xff0c;才不会被同龄人甩下&#xff1f;” 其实&#xff0c;人工智能时代&#xff0c;孩子们的竞争战地正在转到——少儿编程&#xff…

linux 网络连接未知,ubuntu – 网络问题. Ifup说未知界面

这是ifconfig的输出# ifconfigenp0s3 Link encap:Ethernet HWaddr 08:00:27:ef:b6:e6inet addr:192.168.2.3 Bcast:192.168.2.255 Mask:255.255.255.0inet6 addr: fe80::cf19:776a:4d5c:36e0/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:713069 …

linux --- vsftp

vsftp 一、简介与原理 1、VSFTP&#xff08;very secuery file tranfer protocol&#xff09; 2、主动模式&#xff1a; 3、被动模式&#xff1a; 4、服务器程序&#xff1a; > vsftpd 5、install&#xff1a; >vaftpd-2.2.2-11.e16.i686.rpm >yum -y install vsftpd …

go tcp客户端自动重连_使用 Go 语言创建 WebSocket 服务

今天介绍如何用 Go 语言创建 WebSocket 服务&#xff0c;文章的前两部分简要介绍了 WebSocket 协议以及用 Go 标准库如何创建 WebSocket 服务。第三部分实践环节我们使用了 gorilla/websocket 库帮助我们快速构建 WebSocket 服务&#xff0c;它帮封装了使用 Go 标准库实现 WebS…