题解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 ...
随机推荐
- Python学习笔记----列表、元组和字典的基础操作
文章目录 一.列表的基本操作 1.1 修改列表中的某个数据 1.2 获取某个元素的返回值(返回的是索引) 1.3 在列表中插入新的元素 1.4 删除列表中的元素 1.5 +和* 二.内置的函数和方法 ...
- Request method ‘POST‘ not supported。 Failed to load resource: net::ERR_FAILED
1.问题描述 技术栈:前后端项目分离(Springboot+Vue+MybatisPlus) 前端报错信息: 后端报错信息: 2.问题分析 这里使用了ResultFul风格的接口设计方式.增删改查对应 ...
- 常用排序算法(C语言)
1.冒泡排序 void BubbleSort(int a[],int len) {int tmp; for (int i=0; i<n-1; i++) { int flag = FALSE; f ...
- Codeforces Round #816 (Div. 2)/CodeForces1715
CodeForces1715 Crossmarket 解析: 题目大意 有一个 \(n \times m\) 的空间,Stanley 需要从左上角到右下角:Megan 则需要从左下角到右上角.两人可以 ...
- Java安全之Tomcat6 Filter内存马
Java安全之Tomcat6 Filter内存马 回顾Tomcat8打法 先回顾下之前Tomcat789的打法 这里先抛开 7 8之间的区别, 在8中,最后add到filterchain的都是一个fi ...
- 一次 Java log4j2 漏洞导致的生产问题
一.问题 近期生产在提交了微信小程序审核后(后面会讲到),总会出现一些生产告警,而且持续时间较长.我们查看一些工具和系统相关的,发现把我们的 gateway 差不多打死了. 有一些现象. 网关有很多接 ...
- 利用xtrabackup8完全,增量备份及还原MySQL8
利用xtrabackup8完全,增量备份及还原MySQL8 1.环境准备 服务器 作用 数据库版本 xtrabackup版本 10.0.0.8 数据备份 mysql8.0.26 8.0.28 10.0 ...
- loguru库使用
参考: https://github.com/Delgan/loguru https://loguru.readthedocs.io/en/stable/overview.html https://b ...
- Nginx负载均衡策略的介绍与调优
工作中经常会用到nginx负载均衡这一块,下面对nginx负载均衡策略做个总结.本人在工作中最常用到的负载均衡策略是轮询策略. 在一般情况下,Web中间件最大的作用就是负责对请求进行分发,也就是我们常 ...
- 本人常用的sed命令用法
如果使用sed命令修改文件,需要为sed命令指定[-i]选项(i,insert表示插入指令),下面是本人常用到的几种场景: 1. 在文件最后一行的下一行添加配置 如:在配置文件/etc/profile ...