ACM/ICPC 之 最小割转网络流(POJ3469)
重点:构图
//最小割转网络流
//邻接表+Dinic
//Time:5797Ms Memory:6192K
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
#define MAXN 20005
#define MAXM 500005
#define INF 0x3f3f3f3f
struct Edge{
int v, w, next;
Edge(){}
Edge(int vv, int ww, int nn):v(vv), w(ww), next(nn){}
}e[MAXM];
int n,m;
int s,t;
int h[MAXN], le;
int d[MAXN];
void add(int u, int v, int w)
{
e[le] = Edge(v, w, h[u]); h[u] = le++;
}
bool bfs()
{
memset(d, -1, sizeof(d));
queue<int> q;
q.push(s); d[s] = 0;
while(!q.empty()){
int cur = q.front();
q.pop();
for(int i = h[cur]; i != -1; i = e[i].next)
{
int v = e[i].v;
if(d[v] == -1 && e[i].w)
{
d[v] = d[cur] + 1;
if(v == t) return true;
q.push(v);
}
}
}
return false;
}
int dfs(int x, int sum)
{
if(x == t || sum == 0) return sum;
int src = sum;
for(int i = h[x]; i != -1; i = e[i].next)
{
int v = e[i].v;
if(d[v] == d[x] + 1 && e[i].w){
int tmp = dfs(v, min(e[i].w, sum));
e[i].w -= tmp;
e[i^1].w += tmp;
sum -= tmp;
}
}
return src - sum;
}
int Dinic()
{
int maxFlow = 0;
while(bfs())
maxFlow += dfs(s, INF);
return maxFlow;
}
int main()
{
//freopen("in.txt", "r", stdin);
memset(h,-1,sizeof(h));
scanf("%d%d", &n,&m);
s = 0; t = n+1;
for(int i = 1; i <= n; i++)
{
int a,b;
scanf("%d%d", &a,&b);
add(s, i, a); add(i, s, 0);
add(i, t, b); add(t, i, 0);
}
for(int i = 1; i <= m; i++)
{
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
add(u, v, w); add(v, u, w);
}
printf("%d\n", Dinic());
return 0;
}
ACM/ICPC 之 最小割转网络流(POJ3469)的更多相关文章
- 【BZOJ2229】[ZJOI2011]最小割(网络流,最小割树)
[BZOJ2229][ZJOI2011]最小割(网络流,最小割树) 题面 BZOJ 洛谷 题解 戳这里 那么实现过程就是任选两点跑最小割更新答案,然后把点集划分为和\(S\)联通以及与\(T\)联通. ...
- 【BZOJ1797】[AHOI2009]最小割(网络流)
[BZOJ1797][AHOI2009]最小割(网络流) 题面 BZOJ 洛谷 题解 最小割的判定问题,这里就当做记结论吧.(源自\(lun\)的课件) 我们先跑一遍最小割,求出残量网络.然后把所有还 ...
- 【bzoj2229】[Zjoi2011]最小割 分治+网络流最小割
题目描述 小白在图论课上学到了一个新的概念——最小割,下课后小白在笔记本上写下了如下这段话: “对于一个图,某个对图中结点的划分将图中所有结点分成两个部分,如果结点s,t不在同一个部分中,则称这个划分 ...
- bzoj1391 最大权闭合子图(also最小割、网络流)
一道裸的最小割的题,写一下只是练练手. 表示被卡M,RE不开心.一道裸题至于吗? 再次复习一下最大权闭合子图: 1.每一个点若为正权,与源点连一条容量为绝对值权值的边.否则连向汇点一条容量为绝对值权值 ...
- [bzoj4519][Cqoi2016]不同的最小割_网络流_最小割_最小割树
不同的最小割 bzoj-4519 Cqoi-2016 题目大意:题目链接. 注释:略. 想法: 我们发现这和最小割那题比较像. 我们依然通过那个题说的办法一样,构建最小割树即可. 接下来就是随便怎么处 ...
- [bzoj2229][Zjoi2011]最小割_网络流_最小割树
最小割 bzoj-2229 Zjoi-2011 题目大意:题目链接. 注释:略. 想法: 在这里给出最小割树的定义. 最小割树啊,就是这样一棵树.一个图的最小割树满足这棵树上任意两点之间的最小值就是原 ...
- bzoj1797: [Ahoi2009]Mincut 最小割(网络流,缩点)
传送门 首先肯定要跑一个最小割也就是最大流 然后我们把残量网络tarjan,用所有没有满流的边来缩点 一条边如果没有满流,那它就不可能被割了 一条边如果所属的两个强联通分量不同,它就可以被割 一条边如 ...
- P4126 [AHOI2009]最小割(网络流+tarjan)
P4126 [AHOI2009]最小割 边$(x,y)$是可行流的条件: 1.满流:2.残量网络中$x,y$不连通 边$(x,y)$是必须流的条件: 1.满流:2.残量网络中$x,S$与$y,T$分别 ...
- P4126-[AHOI2009]最小割【网络流,tarjan】
正题 题目链接:https://www.luogu.com.cn/problem/P4126 题目大意 给出\(n\)个点\(m\)条边的一张有向图和起点终点.对于每条边求其是否是最小割的可行割/必须 ...
随机推荐
- 让 http 2来得更猛烈些吧
今早在公交车上,把http2的官方讲解文档(还在草案之中)看了一圈,发现相对http 1.1确实改进了不少,完整的文档可通过:://www.gitbook.com/book/ye11ow/http2- ...
- Centos6.4 本地yum源配置
由于单位的服务器均使用的是内网,而安装一些软件如Git,需要很多的依赖包,使用yum安装相对简单,由于不能联网故配置本地yum源配置. 1.首先将需要rpm库添加到系统中: 1).虚拟机中安装的lin ...
- 订餐系统之微信支付,踩了官方demo的坑
最近一个项目要增加微信支付的功能,想来这个东西出来这么久了,按微信提供的应该可以很快搞定的,结果提供的demo( JS API网页支付)中各种坑,咨询他们的客服,态度倒是非常好,就是解决不了问 ...
- 配置Windows下的PHP开发环境
一.配置 Apache 开发环境: 二.配置 PHP 开发环境 配置 Apache 开发环境 0. 下载 Apache.由于官方只提供了源码包,我们要么自己编译要么使用别人提供的已经编译好的二进制包. ...
- Spring Boot入门===Hello World
昨天无意间看到Spring Boot ,今天又了解了一下,试着写一个Hello World! 今天看了半天,最后还是要用Maven最方便!以下: 一.工具 JDK1.7 Eclipse Maven ...
- SpringBoot源码解析:tomcat启动分析
>> spring与tomcat的启动分析:war包形式 tomcat:xml加载规范 1.contex-param: 初始化参数 2.listener-class: contextloa ...
- windows 下 新建 点开头的文件和文件夹
新建 .aaa文件夹 cmd:$ mkdir .aaa 新建 .aaa文件夹 echo " >> .aaa
- MongoDB高可用复制集分片集群搭建
1 逻辑架构 1.1 逻辑架构图 1.2 组件说明 一.mongos(query routers):查询路由,负责client的连接,并把任务分给shards,然后收集结果.一 ...
- c# .Net :Excel NPOI导入导出操作教程之List集合的数据写到一个Excel文件并导出
将List集合的数据写到一个Excel文件并导出示例: using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using System;using Sys ...
- 如何合并两个Docker 镜像
http://www.open-open.com/lib/view/open1437746544709.html 在你的机器上使用docker pull来从Docker Hub下载镜像. docker ...