题解P4474 王者之剑
简要题意
给你一个 \(n\times m\) 的网格,数字在格子里,你需要取出一些格子,使得任意两个格子之间没有公共边,输出格子中的数字和的最大值。
\(1 \le n,m \le 100\)
思路
如果我们能把公共边的关系刻画成一个二分图,那么就是在求二分图最大独立集。
首先我们将有公共边的两个点连边,但是如果都连上就不是二分图了。这时候我们搬出二分图建模的基本思路——黑白染色!
我们可以对网格黑白染色(就像国际象棋棋盘那样),对白色的点,连向跟它有公共边的点。可以证明,这样每一条边都是白色连向黑色,满足二分图定义。
最后我们建一个超级源点 \(S\),连向白点,建一个超级汇点 \(T\),所有黑点连向它。跑最大流,这样得到的是二分图最大匹配(二分图最小路径点覆盖),然后用二分图点数减去它就好了。
最后附上样例建立的图:

代码
#include<bits/stdc++.h>
#define l(i,j) ((i-1)*m+j)
#define int long long
using namespace std;
int n,m,s,t;
namespace MaxFlow{
struct edge{
int from,to,val;
}e[200001];int head[200001],cur[200001],siz=1;
void add(int x,int y,int z){
e[++siz].to=y,e[siz].val=z;
e[siz].from=head[x],head[x]=siz;
}
void addedge(int x,int y,int z){
add(x,y,z);add(y,x,0);
}
int gap[200001];
bool bfs(){
memset(gap,0,sizeof(gap));
fill(gap+1,gap+1+n,0);
queue<int> q;
q.push(s);
gap[s]=1;
while(!q.empty()){
int now=q.front();
q.pop();
for(int i=head[now];i;i=e[i].from){
int u=e[i].to;
if(e[i].val&&!gap[u]){
gap[u]=gap[now]+1;
q.push(u);
}
}
}
return (gap[t]);
}
int dfs(int now,int val){
if(now==t) return val;
for(int &i=cur[now];i;i=e[i].from){
int u=e[i].to;
if(e[i].val&&gap[now]+1==gap[u]){
int F=dfs(u,min(e[i].val,val));
if(F){
e[i].val-=F;
e[i^1].val+=F;
return F;
}
}
}
return 0;
}
int dinic(){
int ret=0;
while(bfs()){
copy(head,head+1+n,cur);
int F=0;
while(F=dfs(s,10000000000000)){
ret+=F;
}
}
return ret;
}
}
int sum;
const int delta[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
signed main(){
cin>>n>>m;
s=0,t=m*n+1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int w;
cin>>w;
sum+=w;
if((i+j)%2){
MaxFlow::addedge(l(i,j),t,w);
}
else{
MaxFlow::addedge(s,l(i,j),w);
for(int k=0;k<=3;k++){
int x=i+delta[k][0],y=j+delta[k][1];
if((x>=1&&x<=n)&&(y>=1&&y<=m)){
MaxFlow::addedge(l(i,j),l(x,y),LLONG_MAX);
}
}
}
}
}
n=t;
cout<<sum-MaxFlow::dinic()<<'\n';
return 0;
}
题解P4474 王者之剑的更多相关文章
- P4474 王者之剑
P4474 王者之剑 题目大意 n*m的带权网格,任意选择起点开始时刻为0秒.以下操作,每秒按顺序执行 在第i秒开始的时候,在方格(x,y)上,获得(x,y)的值 在偶数秒,周围四格的值清零 每秒可选 ...
- 洛咕 P4474 王者之剑
宝石只能在偶数秒取到,假设有一个宝石在奇数秒取到了,那么上一秒是偶数秒,在上一秒的时候这里的宝石就没了. 相邻的两个宝石不能同时取,很显然,先取一块,那么这是偶数秒,取完了这一块之后相邻的都没了. 只 ...
- BZOJ1324: Exca王者之剑
1324: Exca王者之剑 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 256 Solved: 131[Submit][Status] Desc ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
随机推荐
- JUC(10)深入理解CAS和ABA
文章目录 1.CAS 2.原子引用解决ABA问题,版本号.修改后,可以看到 1.CAS package com.cas; import java.util.concurrent.atomic.Atom ...
- 齐博x1关于小程序个性源代码的说明
系统默认推荐商家小程序使用通用型的源码,即框架套壳iframe形式的.这个灵活性更高.但如果有特殊需求的话,也可以设置个性源码,比如配合uni-app使用,针对不同的小程序就使用不同的uni-app风 ...
- 驱动开发:内核监控FileObject文件回调
本篇文章与上一篇文章<驱动开发:内核注册并监控对象回调>所使用的方式是一样的都是使用ObRegisterCallbacks注册回调事件,只不过上一篇博文中LyShark将回调结构体OB_O ...
- C#--@符号的使用(逐字字符串,跨行,声明关键字变量名)
---对字符串的使用 @可以定义逐字字符串 注意:@只对字符串常量有用 1)不需要用\\来转义非转义符号的\号 例如:@"\"="\\"2)可以实现多行字符 ...
- 【深入浅出 Yarn 架构与实现】2-2 Yarn 基础库 - 底层通信库 RPC
RPC(Remote Procedure Call) 是 Hadoop 服务通信的关键库,支撑上层分布式环境下复杂的进程间(Inter-Process Communication, IPC)通信逻辑, ...
- 本地GoLand编辑与调试远端服务器上的代码
Goland是专为Go开发人员构建的跨平台IDE,功能非常强大,拥有强大的代码洞察力,帮助所有Go开发人员即时错误检测和修复建议,快速和安全的重构,一步撤销,智能代码完成,死代码检测和文档提示,让您创 ...
- 关于Linux mint更换中文字体后全局楷体修改办法
问题描述 linux mint 更新中文字体后,全局都变成了楷体,浏览器里面,终端里(英文字体可以在终端设置里面修改),这里指的是中文字体,而英文字体可以在 linux mint 设置 - 选择字体 ...
- 解决"raise EnvironmentError("%s not found" % (_mysql_config_path,)) OSError: mysql_config not found"报错
redhat系(如centos) yum install mysql-devel debain系(如ubuntu) sudo apt-get install libmysqlclient-dev
- label studio 结合 MMDetection 实现数据集自动标记、模型迭代训练的闭环
前言 一个 AI 方向的朋友因为标数据集发了篇 SCI 论文,看着他标了两个多月的数据集这么辛苦,就想着人工智能都能站在围棋巅峰了,难道不能动动小手为自己标数据吗?查了一下还真有一些能够满足此需求的框 ...
- whylogs工具库的工业实践!机器学习模型流程与效果监控 ⛵
作者:韩信子@ShowMeAI 机器学习实战系列:https://www.showmeai.tech/tutorials/41 本文地址:https://www.showmeai.tech/artic ...