Luogu P2057 [SHOI2007]善意的投票
题目链接 \(Click\) \(Here\)
考虑模型转换。变成文理分科二选一带收益模型,就一波带走了。
如果没有见过这个模型的话,这里讲的很详细。
#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int N = 400010;
const int M = 800010;
const int INF = 0x3f3f3f3f;
const LL INFF = 0x3f3f3f3f3f3f3f3f;
int n, m, cnt = -1, head[N];
struct edge {
	int nxt, to; LL f;
}e[M];
void add_len (int u, int v, LL f) {
	e[++cnt] = (edge) {head[u], v, f}; head[u] = cnt;
	e[++cnt] = (edge) {head[v], u, 0}; head[v] = cnt;
}
int node (int x) {return x;}
int f1 (int x) {return n + m * 0 + x;}
int f2 (int x) {return n + m * 1 + x;} 
queue <int> q;
int cur[N], deep[N];
bool bfs (int s, int t) {
	memcpy (cur, head, sizeof (head));
	memset (deep, 0x3f, sizeof (deep));
	deep[s] = 0; q.push (s);
	while (!q.empty ()) {
		int u = q.front (); q.pop ();
		for (int i = head[u]; ~i; i = e[i].nxt) {
			int v = e[i].to;
			if (deep[v] == INF && e[i].f) {
				deep[v] = deep[u] + 1;
				q.push (v);
			}
 		}
	}
	return deep[t] != INF;
}
LL dfs (int u, int t, LL lim) {
	if (u == t || !lim) {
		return lim;
	}
	int tmp = 0, flow = 0;
	for (int &i = cur[u]; ~i; i = e[i].nxt) {
		int v = e[i].to;
		if (deep[v] == deep[u] + 1) {
			tmp = dfs (v, t, min (lim, e[i].f));
			lim -= tmp;
			flow += tmp;
			e[i ^ 0].f -= tmp;
			e[i ^ 1].f += tmp;
			if (!lim) break;
		}
	}
	return flow;
}
int main () {
	memset (head, -1, sizeof (head));
	cin >> n >> m;
	int s = f2 (m + 1), t = f2 (m + 2);
	for (int i = 1; i <= n; ++i) {
		static int cho;
		cin >> cho;
		if (cho == 0) {
			add_len (s, node (i), INF + 1);
			add_len (node (i), t, INF + 0);
		} else {
			add_len (s, node (i), INF + 0);
			add_len (node (i), t, INF + 1);
		}
		//s -> 0, t -> 1
	}
	for (int i = 1; i <= m; ++i) {
		static int x, y;
		cin >> x >> y;
		add_len (s, f1 (i), 1); add_len (f1 (i), node (x), INFF); add_len (f1 (i), node (y), INFF);
		add_len (f2 (i), t, 1); add_len (node (x), f2 (i), INFF); add_len (node (y), f2 (i), INFF);
	}
	LL min_cut = 0;
	while (bfs (s, t)) {
		min_cut += dfs (s, t, INFF);
	}
	LL ans = (min_cut - n * INF - m);
	cout << ans << endl;
}
												
											Luogu P2057 [SHOI2007]善意的投票的更多相关文章
- 【题解】Luogu P2057 [SHOI2007]善意的投票
		
原题传送门 我们一眼就能看出这是一道最小割的题 我们设不睡觉这种状态为S,睡觉这种状态为T 对于每个人,如果不想睡觉,就从S向这个人连流量为1的边,否则,就从这个人向T连流量为1的边 对于每一对朋友, ...
 - 洛谷 P2057 [SHOI2007]善意的投票 解题报告
		
P2057 [SHOI2007]善意的投票 题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照 ...
 - P2057 [SHOI2007]善意的投票 (最大流)
		
题目 P2057 [SHOI2007]善意的投票 解析 网络流的建模都如此巧妙. 我们把同意的意见看做源点\(s\),不同意的意见看做汇点\(t\). 那我们\(s\)连向所有同意的人,\(t\)连向 ...
 - P2057 [SHOI2007]善意的投票 / [JLOI2010]冠军调查
		
P2057 [SHOI2007]善意的投票 / [JLOI2010]冠军调查 拿来练网络流的qwq 思路:如果i不同意,连边(i,t,1),否则连边(s,i,1).好朋友x,y间连边(x,y,1)(y ...
 - 洛谷P2057 [SHOI2007]善意的投票 题解
		
题目链接: https://www.luogu.org/problemnew/show/P2057 分析: 由0和1的选择我们直觉的想到0与S一堆,1与T一堆. 但是发现,刚开始的主意并不一定是最终的 ...
 - P2057 [SHOI2007]善意的投票   最小割
		
$ \color{#0066ff}{ 题目描述 }$ 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照 ...
 - P2057 [SHOI2007]善意的投票
		
思路 简单的最小割模型 最小割的模型就是选出一些边,把点集划分成S和T两个部分,使得代价最小 到这题上就是板子了 代码 #include <cstdio> #include <alg ...
 - [洛谷P2057][SHOI2007]善意的投票
		
题目大意:有$n(n\leqslant300)$个人,每个人可以选择$0$或$1$,每个人最开始有意愿,有$m(m\leqslant\dfrac{n(n-1)}2)$对好朋友.定义一次的冲突数为好朋友 ...
 - 洛谷$P2057\ [SHOI2007]$ 善意的投票 网络流
		
正解:网络流 解题报告: 传送门! $umm$看到每个人要么0要么1就考虑最小割呗,,,? 然后贡献有两种?一种是违背自己的意愿,一种是和朋友的意愿违背了 所以考虑开一排点分别表示每个人,然后$S$表 ...
 
随机推荐
- js计算剩余分钟
			
// 剩余时间提醒 function checkTime() { if (timeCompare()) { document.getElementById('distanceDeadline').in ...
 - C#与SQL Server数据库连接
			
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
 - Cs231n-assignment 1作业笔记
			
KNN assignment1 KNN讲解参见: https://blog.csdn.net/u014485485/article/details/79433514?utm_source=blogxg ...
 - Proxmox VE登陆的时候提示没有有效的订阅You do not have a valid subscription for this server. Please visit www.proxmox.com to get a list of available options.
			
问题描述: 用的是免费版的,所以每次都提示这个没有有效的订阅挺烦的 解决方法: 修改文件/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib. ...
 - pytorch Debug —交互式调试工具Pdb (ipdb是增强版的pdb)-1-在pytorch中使用
			
参考深度学习框架pytorch:入门和实践一书第六章 以深度学习框架PyTorch一书的学习-第六章-实战指南为前提 在pytorch中Debug pytorch作为一个动态图框架,与ipdb结合能为 ...
 - Fabric CA环境的集成
			
我们前面关于Fabric的所有文章中用到的例子都没有CA Server,都是由cryptogen这个工具根据crypto-config.yaml而生成的.但是在实际生产环境中,我们肯定不能这么做,我们 ...
 - 3-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(购买域名,域名绑定IP)
			
2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(监听Wi-Fi和APP的数据) 因为安全连接是和域名绑在一块的,所以需要申请域名 有没有不知道域名是什么的, ...
 - Python两大佬互相撕逼 技术何苦为难技术?
			
最近两天 Python 圈发生了一件大事,两个 Python 大佬撕逼了起来了. 不,其实是一个大佬(刘志军)被怼. 事情是这样的. 背景 人物介绍: 董明伟:公众号「Python 之美」的作者,似乎 ...
 - java获取真实的IP地址工具类
			
在实际项目中,有调用微信支付完成支付功能,在微信支付的请求参数中需要传递一个本机的ip地址,java代码运行环境目前为windows10以及centos7. 以下为获取ip地址工具类: package ...
 - L1-8 矩阵A乘以B (15 分)
			
给定两个矩阵A和B,要求你计算它们的乘积矩阵AB.需要注意的是,只有规模匹配的矩阵才可以相乘.即若A有Ra行.Ca列,B有Rb行.Cb列,则只有Ca与Rb相等时,两 ...