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\)条边的一张有向图和起点终点.对于每条边求其是否是最小割的可行割/必须 ...
随机推荐
- Unix NetWork Programming(unix环境编程)——环境搭建(解决unp.h等源码编译问题)
此配置实例亲测成功,共勉,有问题大家留言. 环境:VMware 10 + unbuntu 14.04 为了unix进行网络编程,编程第一个unix程序时遇到的问题,不能包含unp.h文件,这个感觉和a ...
- knockoutJS学习笔记04:监控属性
一.语法介绍 先来看一个简单的例子: <span data-bind="text:name"></span> var obj = {name:ko.obse ...
- 冒泡排序 & 选择排序 & 插入排序 & 希尔排序 JavaScript 实现
之前用 JavaScript 写过 快速排序 和 归并排序,本文聊聊四个基础排序算法.(本文默认排序结果都是从小到大) 冒泡排序 冒泡排序每次循环结束会将最大的元素 "冒泡" 到最 ...
- 85 megacli-查看raid信息
文章本身我不做过多修改了,在这里我就把自己在安装时候碰到的难点跟大家提下.1.何处下载?首先,根据文章中的路径已经下载不到相应的文件了,在此我们就自己到http://www.lsi.com的网站上去搜 ...
- 1122从业务优化MYSQL
http://blog.itpub.net/22664653/viewspace-2079576/ 开发反馈一个表的数据大小已经130G,对物理存储空间有影响,且不容易做数据库ddl变更.咨询了开发相 ...
- [转]ExtJs:xtype的含义
原文地址:http://www.cnblogs.com/timy/archive/2010/08/13/1799111.html 根据我在EXT论坛上的观察,xtype用起来的时候疑惑会比较多.甚至有 ...
- 使用antd UI 制作菜单
antd 主页地址:https://ant.design/docs/react/introduce 在使用过程中,不能照搬antd的组件代码,因为有些并不合适.首先,菜单并没有做跳转功能,仅仅是菜单, ...
- php多文件压缩下载
/*php多文件压缩并且下载*/ function addFileToZip($path,$zip){ $handler=opendir($path); //打开当前文件夹由$path指定. whil ...
- Maven:将Jar安装到本地仓库和Jar上传到私服
1.依赖如下: <dependency> <groupId>org.quartz-scheduler.internal</groupId> <artifact ...
- zoom在css中的作用
zoom:1 zoom:1;属性是IE浏览器的专有属性,Firefox等其它浏览器不支持.它可以设置或检索对象的缩放比例. 兼容IE6.IE7.IE8浏览器,经常会遇到一些问题,可以使用zoom:1来 ...