题目大意:有$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;
}

  

最新文章

  1. 根据juery CSS点击一个标签弹出一个遮罩层的简单示例
  2. Json2JsonArray JsonArray2StringArray
  3. 在线制作h5——上帝的礼物
  4. Oracle数值处理函数 (绝对值、取整...)
  5. Android方法的传递值及其改变
  6. c语言 列出-终止系统进程
  7. nodejs分离html文件里面的js和css
  8. 使用Python的Mock库进行PySpark单元测试
  9. ntp 服务:Server dropped: Strata too high
  10. springMVC中@RequestParam和@RequestBody的作用
  11. 修改centos和ubuntu ssh远程连接端口提升系统安全性
  12. TZOJ 3663 最长路径(floyd)
  13. [Chrome Headless + Python] 截长图 (Take Full-page Screenshot)
  14. 映射文件中增删改查标签中的parameterType和resultType
  15. d2i_xxx出错
  16. React Native 系列(五)
  17. spring mvc 基于注解 配置默认 handlermapping
  18. hdu 3085(双向bfs)
  19. HDOJ:1533-Going Home(最小费用流)
  20. 《A First Course in Abstract Algebra with Applications》-chaper1-数论-关于素数

热门文章

  1. leetcode笔记--7 Find the Difference
  2. PS 放大眼睛
  3. 一种新的自动化 UI 测试解决方案 Airtest Project
  4. Pycharm中查看方法的源码
  5. PyCharm 2018 最新激活方式总结(最新最全最有效)!!!
  6. LeetCode 102 ——二叉树的层次遍历
  7. 预分配内存fifo实现可变长度字节序列存储
  8. #pragma pack(n)对齐格式
  9. TCP/IP 三次握手四次挥手
  10. 【Linux】- CentOS 7 安装.NET Core 2.1