[洛谷P2057][SHOI2007]善意的投票
题目大意:有$n(n\leqslant300)$个人,每个人可以选择$0$或$1$,每个人最开始有意愿,有$m(m\leqslant\dfrac{n(n-1)}2)$对好朋友。定义一次的冲突数为好朋友之间发生冲突的总数加上和自己本来意愿发生冲突的人数。
题解:最小割,源点向原意愿为$0$的点连边,原意愿为$1$的向汇点连边,好朋友之间连边。但如果转换为最大流,好朋友之间要连双向边(不然一个人换选择了就会挂,其实想想,连单向边的话谁连谁?)
卡点:无
C++ Code:
#include <algorithm>
#include <cstdio>
#define maxn 310
#define maxm (maxn * maxn / 2 + maxn * 2)
const int inf = 0x3f3f3f3f; namespace Network_Flow {
int head[maxn], lst[maxn], cnt = 1;
struct Edge {
int to, nxt, w;
} e[maxm << 1];
inline void addedge(int a, int b, int c = 1, int d = 0) {
e[++cnt] = (Edge) { b, head[a], c }; head[a] = cnt;
e[++cnt] = (Edge) { a, head[b], d }; head[b] = cnt;
} int st, ed, n, MF;
int GAP[maxn], d[maxn];
int q[maxn], h, t;
void init() {
GAP[d[q[h = t = 0] = ed] = 1] = 1;
for (int i = st; i <= ed; ++i) lst[i] = head[i];
while (h <= t) {
int u = q[h++];
for (int i = head[u], v; i; i = e[i].nxt) {
v = e[i].to;
if (!d[v]) {
++GAP[d[v] = d[u] + 1];
q[++t] = v;
}
}
}
}
int dfs(int u, int low) {
if (!low || u == ed) return low;
int w, res = 0;
for (int &i = lst[u], v; i; i = e[i].nxt) {
v = e[i].to;
if (d[u] == d[v] + 1) {
w = dfs(v, std::min(low, e[i].w));
res += w, low -= w;
e[i].w -= w, e[i ^ 1].w += w;
if (!low) return res;
}
}
if (!--GAP[d[u]]) d[st] = n + 1;
++GAP[++d[u]], lst[u] = head[u];
return res;
}
void ISAP(int S, int T) {
st = S, ed = T, n = T - S + 1;
init();
while (d[st] <= n) MF += dfs(st, inf);
}
}
using Network_Flow::addedge; int n, m;
int main() {
scanf("%d%d", &n, &m);
int st = 0, ed = n + 1;
for (int i = 1, x; i <= n; ++i) {
scanf("%d", &x);
if (x) addedge(st, i);
else addedge(i, ed);
}
for (int i = 0, a, b; i < m; ++i) {
scanf("%d%d", &a, &b);
addedge(a, b, 1, 1);
}
Network_Flow::ISAP(st, ed);
printf("%d\n", Network_Flow::MF);
return 0;
}
[洛谷P2057][SHOI2007]善意的投票的更多相关文章
- 洛谷 P2057 [SHOI2007]善意的投票 解题报告
P2057 [SHOI2007]善意的投票 题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照 ...
- 洛谷P2057 [SHOI2007]善意的投票 题解
题目链接: https://www.luogu.org/problemnew/show/P2057 分析: 由0和1的选择我们直觉的想到0与S一堆,1与T一堆. 但是发现,刚开始的主意并不一定是最终的 ...
- 洛谷$P2057\ [SHOI2007]$ 善意的投票 网络流
正解:网络流 解题报告: 传送门! $umm$看到每个人要么0要么1就考虑最小割呗,,,? 然后贡献有两种?一种是违背自己的意愿,一种是和朋友的意愿违背了 所以考虑开一排点分别表示每个人,然后$S$表 ...
- [洛谷P2057][bzoj1934]善意的投票(最大流)
题目描述 幼儿园里有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]善意的投票 最小割
$ \color{#0066ff}{ 题目描述 }$ 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照 ...
- Luogu P2057 [SHOI2007]善意的投票
题目链接 \(Click\) \(Here\) 考虑模型转换.变成文理分科二选一带收益模型,就一波带走了. 如果没有见过这个模型的话,这里讲的很详细. #include <bits/stdc++ ...
- 【题解】Luogu P2057 [SHOI2007]善意的投票
原题传送门 我们一眼就能看出这是一道最小割的题 我们设不睡觉这种状态为S,睡觉这种状态为T 对于每个人,如果不想睡觉,就从S向这个人连流量为1的边,否则,就从这个人向T连流量为1的边 对于每一对朋友, ...
随机推荐
- OpenCV 3.2 Viz 3D可视化
该可视化模块提供了坐标系变化,3D动画等功能 最简单的显示坐标系 viz::Viz3d window("window"); window.showWidget("Coor ...
- spring-boot日志操作
SpringBoot Logback日志配置 Logback的配置介绍: 1.Logger.appender及layout Logger作为日志的记录器,把它关联到应用的对应的context上后,主要 ...
- linux进程的学习笔记(未完)
1. 进程是程序执行的一个实例,如果16个用户同时运行vi,那么有16个独立的进程,尽管它们共享同一个可执行代码,问题在于FreeRTOS这种系统,是否可以建2个相同的任务,需要注意什么?在linux ...
- redis 类型、方法
之前使用redis,现在对所有redis方法做一个总结: string类型 形式:key=>value; 说明:最简单的类型:一个key对应一个value,value保存的类型是二进制安全的,s ...
- cf#512 C. Vasya and Golden Ticket
题目链接 http://codeforces.com/contest/1058/problem/C 这题还是暴力最方便,和的情况最多有n*a[i] 900种把每种都试一遍 #include<b ...
- redmine本地安装部署
1.railsinstaller-3.2.0.exe 下载地址 http://railsinstaller.org/en 安装railsinstaller 一直点next就可以了,安装完成之后C盘会 ...
- lintcode First Unique Number In Stream
First Unique Number In Stream 描述: Given a continuous stream of numbers, write a function that return ...
- Java学习笔记-11.运行期间类型鉴定
1.Class对象的getClasses()方法获取的是该类中所有的公共的内部类,以及从父类,父接口继承来的内部类.getinterfaces()方法返回类继承的所有接口. import javax. ...
- CDH/Hadoop 5.15 installation steps
I will talk the main steps to install CDH 5.15 on Linux(CENT OS 6.10). The installation method is M ...
- java poi技术读取到数据库
https://www.cnblogs.com/hongten/p/java_poi_excel.html java的poi技术读取Excel数据到MySQL 这篇blog是介绍java中的poi技术 ...