\(\text{Problem}\)

在一个矩阵里选数,每行最多选两个,每列最多选两个,最大会价值

\(n,m \le 30\)

\(\text{Analysis}\)

对个这个限制如何实现?

跑费用流

把行看做点,列看做点

点对 \((i,j)\) 就用 \(i\) 行点连向 \(j\) 列点,流量为 \(1\),费用为 \(-v[i][j]\)

原点向行点连一条流量为 \(2\),费用为 \(0\) 的边,列点向汇点连一条流量为 \(2\),费用为 \(0\) 的边

这样就可以保证限制了

因为跑 \(spfa\) 得到最小费用,但要注意不一定要最大流,可行流即可

所以 \(spfa\) 后判断 \(dis[T]\) 的正负情况,决定是否继续

\(\text{Code}\)

#include<cstdio>
#include<cstring>
#include<queue>
using namespace std; const int N = 905;
int n , m , S = 0 , T, Maxflow , Mincost;
int dis[N] , h[N] , vis[N] , pre[N] , edge[N] , flow[N] , tot = 1; queue<int> d;
struct node{
int to , nxt , w , f;
}e[N << 1 + 10]; inline void add(int u , int v , int w , int f){e[++tot] = node{v, h[u], w, f}, h[u] = tot;} int spfa()
{
memset(vis , 0 , sizeof(vis));
memset(dis , 127 , sizeof(dis));
memset(flow , 127 , sizeof(flow));
d.push(S);
vis[S] = 1 , dis[S] = 0 , pre[T] = -1;
while (!d.empty())
{
int now = d.front();
d.pop(), vis[now] = 0;
for(register int i = h[now]; i; i = e[i].nxt)
if (dis[e[i].to] > dis[now] + e[i].f && e[i].w)
{
dis[e[i].to] = dis[now] + e[i].f;
flow[e[i].to] = min(flow[now] , e[i].w);
pre[e[i].to] = now, edge[e[i].to] = i;
if (!vis[e[i].to]) vis[e[i].to] = 1 , d.push(e[i].to);
}
}
return (dis[T] < 0 && pre[T] != -1);
} int MCMF()
{
while (spfa())
{
Maxflow += flow[T], Mincost += dis[T] * flow[T];
int now = T;
while (now != S)
e[edge[now]].w -= flow[T], e[edge[now] ^ 1].w += flow[T], now = pre[now];
}
return Mincost;
} int main()
{
freopen("pick.in", "r", stdin);
freopen("pick.out", "w", stdout);
scanf("%d%d", &n, &m), T = n + m + 1;
for(int i = 1, x; i <= n; i++)
for(int j = 1; j <= m; j++) scanf("%d", &x), add(i, j + n, 1, -x), add(j + n, i, 0, x);
for(int i = 1; i <= n; i++) add(S, i, 2, 0), add(i, S, 0, 0);
for(int j = 1; j <= m; j++) add(j + n, T, 2, 0), add(T, j + n, 0, 0);
printf("%d\n", -MCMF());
}

JZOJ 3447.摘取作物的更多相关文章

  1. BZOJ3438 小M的作物(最小割)

    题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=3438 Description 小M在MC里开辟了两块巨大的耕地A和B(你可以认为 ...

  2. bzoj 3438: 小M的作物

    Description 背景 小M还是个特么喜欢玩MC的孩纸... 描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子有1个(就是可以种一 ...

  3. 【BZOJ-3438】小M的作物 最小割 + 最大权闭合图

    3438: 小M的作物 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 825  Solved: 368[Submit][Status][Discuss ...

  4. BZOJ 3438: 小M的作物( 最小割 )

    orz出题人云神... 放上官方题解... 转成最小割然后建图跑最大流就行了... ---------------------------------------------------------- ...

  5. P1361 小M的作物

    P1361 小M的作物 题目描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子有1个(就是可以种一棵作物)(用1...n编号). 现在,第 ...

  6. (jzoj snow的追寻)线段树维护树的直径

    jzoj snow的追寻 DFS序上搞 合并暴力和,记录最长链和当前最远点,距离跑LCA # include <stdio.h> # include <stdlib.h> # ...

  7. BZOJ_3438_小M的作物_最小割

    BZOJ_3438_小M的作物_最小割 Description 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子 有1个(就是可以种一棵作物) ...

  8. [jzoj]3506.【NOIP2013模拟11.4A组】善良的精灵(fairy)(深度优先生成树)

    Link https://jzoj.net/senior/#main/show/3506 Description 从前有一个善良的精灵. 一天,一个年轻人B找到她并请他预言他的未来.这个精灵透过他的水 ...

  9. [jzoj]3468.【NOIP2013模拟联考7】OSU!(osu)

    Link https://jzoj.net/senior/#main/show/3468 Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: ...

  10. [jzoj]5478.【NOIP2017提高组正式赛】列队

    Link https://jzoj.net/senior/#main/show/5478 Description Sylvia 是一个热爱学习的女孩子.       前段时间,Sylvia 参加了学校 ...

随机推荐

  1. 痞子衡嵌入式:MCUXpresso IDE下高度灵活的FreeMarker链接文件模板机制

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下高度灵活的FreeMarker链接文件模板机制. 痞子衡之前写过一篇文章 <MCUXpresso I ...

  2. 【每日一题】【递归+int型返回值最后不接收】110. 平衡二叉树-211231/220221

    给定一个二叉树,判断它是否是高度平衡的二叉树. 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 . 答案: public class Solution ...

  3. VSCODE 中.art文件识别为html文件

    setting.json文件中 { "git.ignoreMissingGitWarning": true, "explorer.confirmDelete": ...

  4. psutil模块使用(系统监控,性能分析,进程管理)

    psutil模块的介绍 在Python中,我们可以使用psutil这个第三方模块去获取信息的信息. psutil模块可以跨平台使用,支持Linux/UNIX/OSX/Windows等,它主要用来做系统 ...

  5. QT中常用控键

    1.TableWidget类 1.1. 表格属性设置 1.1.1设置行列属性 //设置行列均分 tableWidget->horizontalHeader()->setStretchLas ...

  6. [python]《Python编程快速上手:让繁琐工作自动化》学习笔记1

    1. 模式匹配与正则表达式笔记(第7章)(代码下载) 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念. ...

  7. [OpenCV实战]24 使用OpenCV进行曝光融合

    目录 1 什么是曝光融合 2 曝光融合的原理 3 代码与结果 4 参考 本教程中,我们将了解使用OpenCV的Exposure Fusion(曝光融合). 1 什么是曝光融合 曝光融合是一种将使用不同 ...

  8. [OpenCV实战]3 透明斗篷

    目录 1寻找和存储背景帧 2红色区域检测 3提取红色区域 4背景帧红布区域替换当前帧红布区域. 5工程代码 参考 弄出哈利波特电影里一样效果的透明斗篷.也就是一个视频里,将红布弄成透明.类似下面的效果 ...

  9. Windows下Mariadb中文乱码问题

    win10 在命令行使用Mariadb出现无法插入中文 并且之前正确插入的中文也无法正常显示了 ERROR 1366 (22007): Incorrect string value: '\xB1\xB ...

  10. Zabbix与乐维监控对比分析(八)——其他功能篇

    前面我们详细介绍了Zabbix与乐维监控的架构与性能.Agent管理.自动发现.权限管理.对象管理.告警管理.可视化.图形图表及网络功能方面的对比分析,接下来我们将对二者其他功能进行对比分析. 本篇是 ...