JZOJ 3447.摘取作物
\(\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.摘取作物的更多相关文章
- BZOJ3438 小M的作物(最小割)
题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=3438 Description 小M在MC里开辟了两块巨大的耕地A和B(你可以认为 ...
- bzoj 3438: 小M的作物
Description 背景 小M还是个特么喜欢玩MC的孩纸... 描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子有1个(就是可以种一 ...
- 【BZOJ-3438】小M的作物 最小割 + 最大权闭合图
3438: 小M的作物 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 825 Solved: 368[Submit][Status][Discuss ...
- BZOJ 3438: 小M的作物( 最小割 )
orz出题人云神... 放上官方题解... 转成最小割然后建图跑最大流就行了... ---------------------------------------------------------- ...
- P1361 小M的作物
P1361 小M的作物 题目描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子有1个(就是可以种一棵作物)(用1...n编号). 现在,第 ...
- (jzoj snow的追寻)线段树维护树的直径
jzoj snow的追寻 DFS序上搞 合并暴力和,记录最长链和当前最远点,距离跑LCA # include <stdio.h> # include <stdlib.h> # ...
- BZOJ_3438_小M的作物_最小割
BZOJ_3438_小M的作物_最小割 Description 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子 有1个(就是可以种一棵作物) ...
- [jzoj]3506.【NOIP2013模拟11.4A组】善良的精灵(fairy)(深度优先生成树)
Link https://jzoj.net/senior/#main/show/3506 Description 从前有一个善良的精灵. 一天,一个年轻人B找到她并请他预言他的未来.这个精灵透过他的水 ...
- [jzoj]3468.【NOIP2013模拟联考7】OSU!(osu)
Link https://jzoj.net/senior/#main/show/3468 Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: ...
- [jzoj]5478.【NOIP2017提高组正式赛】列队
Link https://jzoj.net/senior/#main/show/5478 Description Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校 ...
随机推荐
- vue3响应式原理以及ref和reactive区别还有vue2/3生命周期的对比,第二天
前言: 前天我们学了 ref 和 reactive ,提到了响应式数据和 Proxy ,那我们今天就来了解一下,vue3 的响应式 在了解之前,先复习一下之前 vue2 的响应式原理 vue2 的响应 ...
- 【Spark】Day06-Spark高级课程:性能调优、算子调优、Shuffle调优、JVM调优、数据倾斜、TroubleShooting
一.Spark性能调优 1.常规性能调优 (1)最优资源配置:Executor数量.Executor内存大小.CPU核心数量&Driver内存 (2)RDD优化:RDD复用.RDD持久化(序列 ...
- Qt开发Active控件:如何使用ActiveQt Server开发大型软件的主框架(2)
Qt开发Active控件:如何使用ActiveQt Server开发大型软件的主框架 注:本文更多地是带着如何去思考答案,而不是纯粹的放一个答案上来,如果你需要直接看到完整的答案,请直接看实例和最后的 ...
- 基于.NetCore开发博客项目 StarBlog - (22) 开发博客文章相关接口
前言 本文介绍博客文章相关接口的开发,作为接口开发介绍的第一篇,会写得比较详细,以抛砖引玉,后面的其他接口就粗略带过了,着重于WebApi开发的周边设施. 涉及到的接口:文章CRUD.置顶文章.推荐文 ...
- jenkins+git+.net core实现自动发布
一.前言 继上篇介绍jenkins过去2年多了,最近整理了一下,希望这篇能介绍到一些更实用的方法和知识. 本次使用的jenkins版本是2.375.1.jdk 17.WinRAR.git:发布时,可以 ...
- Mybatis-9.28
Mybatis-9.28 环境: JDK1.8 Mysql 5.7 maven 3.6.1 IDEA 回顾: JDBC Mysql Java基础 Maven Junit SSM框架:配置文件的. 最好 ...
- [编程基础] Python列表解析总结
在本教程中,我们将学习使用Python列表解析(list comprehensions)相关知识 1 使用介绍 列表解析是一种基于现有列表创建列表的句法结构.列表解析提供了创建列表的简洁方法.通常需要 ...
- 《STL源码剖析》STL迭代器分类
input迭代器:只能向前移动,一次一步,用户只能读取,不能修改它们所指向的东西,而且只能读取一次. output迭代器情况类似,但一切只为输出:它们只能向前移动,一次一步,用户只可以修改它们所指向的 ...
- P7960 [NOIP2021] 报数
简要题意 小Z在玩报数游戏,这个游戏有一个规则,就是对于一个正整数 \(x\),如果满足 \(7 \mid x\) 或 \(x\) 的十进制写法中含有 \(7\) 或是十进制写法含有 \(7\) 的倍 ...
- YMOI 2019.6.29
题解 YMOI 2019.6.29 放弃FAIOJ,用cena考了一次试.被全方位吊打.. T1 开灯 题面: 在一条无限长的路上,有一排无限长的路灯,编号为1,2,3,4,--. 每一盏灯只有两种可 ...