bzoj 1934最小割
比较显然的最小割的题,增加节点source,sink,对于所有选1的人我们可以(source,i,1),选0的人我们可以(i,sink,1),然后对于好朋友我们可以连接(i,j,1)(j,i,1),然后我们求最小割就好了,因为我们可以将节点分为两部分,表示0,1的选法,那么我们割一条与sink,source连的边表示这个人与自己的意愿不同,需要1的代价,如果两个人连边,这两个人不在同一集合,那么这两个人割掉连边需要1的代价。
/**************************************************************
Problem: 1934
User: BLADEVIL
Language: C++
Result: Accepted
Time:20 ms
Memory:3156 kb
****************************************************************/ //By BLADEVIL
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxm 100010
#define maxn 400
#define inf (~0U>>1) using namespace std; int n,m,source,sink,l,ans;
int last[maxn],other[maxm<<],len[maxm<<],pre[maxm<<],flag[maxn];
int que[maxn],d[maxn]; void connect(int x,int y,int z) {
pre[++l]=last[x];
last[x]=l;
other[l]=y;
len[l]=z;
} bool bfs() {
memset(d,,sizeof d);
que[]=source; d[source]=;
int h=,t=;
while (h<t) {
int cur=que[++h];
for (int p=last[cur];p;p=pre[p]) {
if (d[other[p]]) continue;
if (!len[p]) continue;
d[other[p]]=d[cur]+;
que[++t]=other[p];
if (other[p]==sink) return ;
}
}
return ;
} int dinic(int x,int flow) {
if (x==sink) return flow;
int rest=flow;
for (int p=last[x];p;p=pre[p]) {
if (!len[p]) continue;
if (d[other[p]]!=d[x]+) continue;
if (!rest) continue;
int tmp=dinic(other[p],min(len[p],rest));
if (!tmp) d[other[p]]=;
len[p]-=tmp; len[p^]+=tmp;
rest-=tmp;
}
return flow-rest;
} int main() {
scanf("%d%d",&n,&m);
source=n+; sink=source+; l=;
for (int i=;i<=n;i++) {
scanf("%d",&flag[i]);
if (flag[i]) connect(source,i,),connect(i,source,); else
connect(i,sink,),connect(sink,i,);
}
for (int i=;i<=m;i++) {
int x,y; scanf("%d%d",&x,&y);
connect(x,y,); connect(y,x,);
connect(y,x,); connect(x,y,);
}
while (bfs()) ans+=dinic(source,inf);
printf("%d\n",ans);
return ;
}
bzoj 1934最小割的更多相关文章
- bzoj 1934 最小割
		收获: 1.流量为0的边可以不加入. 2.最小割方案要与决策方案对应. #include <cstdio> #include <cmath> #include <cstr ... 
- BZOJ 1412 & 最小割
		什么时候ZJ省选再现一次这么良心的题吧... 题意: 在一个染色的格子画分割线,使其不想连,求最少的线段 SOL: 裸裸的最小割.题目要求两种颜色不想连,我们把他分到两个集合,也就是把所有相连的边切断 ... 
- BZOJ 1797 最小割
		题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1797 题意:给出一个有向图,每条边有流量,给出源点汇点s.t.对于每条边,询问:(1)是 ... 
- BZOJ 2229 最小割
		题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2229 题意:给定一个带权无向图.若干询问,每个询问回答有多少点对(s,t)满足s和t的最 ... 
- bzoj 1497 最小割模型
		我们可以对于消费和盈利的点建立二分图,开始答案为所有的盈利和, 那么源向消费的点连边,流量为消费值,盈利向汇连边,流量为盈利值 中间盈利对应的消费连边,流量为INF,那么我们求这张图的最小割,用 开始 ... 
- bzoj 3996 最小割
		公式推出来后想了半天没思路,居然A是01矩阵..... 如果一个问题是求最值,并那么尝试先将所有可能收益加起来,然后矛盾部分能否用最小割表达(本题有两个矛盾,第一个是选还是不选,第二个是i,j有一个不 ... 
- bzoj 1497  最小割
		思路:最小割好难想啊,根本想不到.. S -> 用户群 = c[ i ] 基站 -> T = p[ i ] 用户群 -> a[ i ] = inf 用户群 -> b[ i ] ... 
- BZOJ 1797 最小割(最小割割边唯一性判定)
		问题一:是否存在一个最小代价路径切断方案,其中该道路被切断? 问题二:是否对任何一个最小代价路径切断方案,都有该道路被切断? 现在请你回答这两个问题. 最小割唯一性判定 jcvb: 在残余网络上跑ta ... 
- BZOJ - 1497 最小割应用
		题意:基站耗费成本,用户获得利益(前提是投入成本),求最大获利 最小割的简单应用,所有可能的收益-(消耗的成本/失去的收益),无穷大边表示冲突,最小割求括号内的范围即可 #include<ios ... 
随机推荐
- PAT 甲级 1077 Kuchiguse
			https://pintia.cn/problem-sets/994805342720868352/problems/994805390896644096 The Japanese language ... 
- Git命令常用清单
			本文从以下十个方面,介绍Git命令的常用清单: 一.新建代码库 二.配置 三.增加/删除文件 四.代码提交 五.分支 六.标签 七.查看信息 八.远程同步 九.撤销 十.其他 每天使用 Git ,但是 ... 
- (windows下的)Apache无法启动解决 the requested operation has failed
			 以下文章是转载别人的,这里只做学习用 ============================================================================== ... 
- 自动化测试断言Assent的使用
			Assent 断言模板包含如下方法: assert.fail(actual, expected, message, operator) assert.ok(value, [message]) asse ... 
- 【入门向】使用 MetaHook Plus 绘制 HUD
			MetaHook Plus 是一个GoldSrc引擎(就是的Half-Life.CS1.6的引擎)的客户端插件平台,它可以加载我们自己开发的DLL插件. 首先你需要安装一个 Visual Studio ... 
- 题解 P1567 【统计天数】
			天哪!竟然没人用优先队列! 小金羊又来水题了... 优先队列中的大根堆帮助我们把时间复杂度降到O(n+logn) 首先我们先了解一下大根堆... 大根堆的性质:根节点比子节点大, 这意味着最上面的节点 ... 
- 3.5  面向连接的运输:TCP
			3.5 面向连接的运输:TCP 3.5.1 TCP连接 TCP进行传输之间要进行三次握手建立连接,这个连接不是物理意义上的有一根电线连接,而是应用端两个应用,在逻辑上是已经建立连接了. TCP 不需 ... 
- CF 566A Matching Names
			CF 566A Matching Names 题目描述 给出n个名字和n个昵称,求一个名字和昵称的劈配方案,使得被劈配的名字和昵称的最长公共前缀长度的和最大. 1<=n<=100000 字 ... 
- 使当前对象相对于上层DIV 水平、垂直居中定位
			<!doctype html> <html> <head> <meta http-equiv="content-type" content ... 
- HDU.1689 Just a Hook (线段树 区间替换 区间总和)
			HDU.1689 Just a Hook (线段树 区间替换 区间总和) 题意分析 一开始叶子节点均为1,操作为将[L,R]区间全部替换成C,求总区间[1,N]和 线段树维护区间和 . 建树的时候初始 ... 
