当前位置: 首页 > news >正文

[bzoj1324]Exca王者之剑_最小割

Exca王者之剑 bzoj-1324

题目大意:题目链接。

注释:略。


想法

最小割经典模型。

所有格子向源点连权值为格子权值的边。

将棋盘黑白染色后白点反转源汇。

如果两个格子相邻那么黑点向白点连$inf$的有向边。

求最小割即可。

开始把所有点的权值都加上,如果被割掉那么就表示这个格子不选。

Code

#include <bits/stdc++.h>
#define inf 0x3f3f3f3f 
#define N 100010 
using namespace std;
queue<int>q;
int to[N<<1],nxt[N<<1],tot=1,val[N<<1],head[N],dis[N],S,T;
int d1[]={-1,1,0,0};
int d2[]={0,0,1,-1};
char *p1,*p2,buf[100000];
#define nc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
int rd() {int x=0,f=1; char c=nc(); while(c<48) {if(c=='-') f=-1; c=nc();} while(c>47) x=(((x<<2)+x)<<1)+(c^48),c=nc(); return x*f;}
inline void add(int x,int y,int z)
{
	to[++tot]=y; val[tot]=z; nxt[tot]=head[x]; head[x]=tot;
	to[++tot]=x; val[tot]=0; nxt[tot]=head[y]; head[y]=tot;
}
bool bfs()
{
	memset(dis,-1,sizeof dis); while(!q.empty()) q.pop();
	dis[S]=0; q.push(S); while(!q.empty())
	{
		int x=q.front(); q.pop(); for(int i=head[x];i;i=nxt[i]) if(dis[to[i]]==-1&&val[i]>0)
		{
			dis[to[i]]=dis[x]+1; q.push(to[i]);
			if(to[i]==T) return true;
		}
	}
	return false;
}
int dinic(int x,int fl)
{
	int tmp=fl; if(x==T) return fl; for(int i=head[x];i;i=nxt[i]) if(dis[to[i]]==dis[x]+1&&val[i]>0)
	{
		int mdl=dinic(to[i],min(val[i],tmp));
		if(!mdl) dis[to[i]]=-1;
		tmp-=mdl; val[i]-=mdl; val[i^1]+=mdl;
		if(!tmp) break;
	}
	return fl-tmp;
}
int main()
{
	int ans=0;
	int n=rd(),m=rd(); T=n*m+1; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)
	{
		int v=rd(); ans+=v;
		if((i+j)&1) add(S,(i-1)*m+j,v),add((i-1)*m+j,T,0);
		else add((i-1)*m+j,T,v),add(S,(i-1)*m+j,0);
		for(int k=0;k<4;k++)
		{
			int x=i+d1[k],y=j+d2[k];
			if(x>=1&&x<=n&&y>=1&&y<=m) ((i+j)&1)?
			(add((i-1)*m+j,(x-1)*m+y,inf)):
			(add((x-1)*m+y,(i-1)*m+j,inf));
		}
	}
	while(bfs()) ans-=dinic(S,1<<30);
	cout << ans << endl ;
	return 0;
}

小结:最小割的建模还是比较具有规律性的。

转载于:https://www.cnblogs.com/ShuraK/p/10244113.html

相关文章:

  • Spring Boot 学习笔记(二)第一个 Spring boot 程序
  • 计算机的门电路和加减乘除
  • WPF入门(四)-线形区域Path内容填充之渐变色(LinearGradientBrush)
  • flask请求流程
  • 浅谈贝叶斯公式
  • 第k个素数
  • 21纯 CSS 创作文本滑动特效的 UI 界面
  • canvas-画圆心的算法
  • [20190113]四校联考
  • 在哪个生命周期事件中,你会做出AJAX请求,为什么?
  • 前进的步伐,应该被记录
  • PIE SDK Command、Tool、Control的调用和拓展
  • 版本,认证,权限
  • 初学HTML-1
  • 实现复杂状态机的一种思路
  • Android 控件背景颜色处理
  • Electron入门介绍
  • HTML-表单
  • Java反射-动态类加载和重新加载
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • unity如何实现一个固定宽度的orthagraphic相机
  • vuex 学习笔记 01
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 聊聊flink的TableFactory
  • 你不可错过的前端面试题(一)
  • 前端知识点整理(待续)
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 学习ES6 变量的解构赋值
  • 阿里云移动端播放器高级功能介绍
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • #define与typedef区别
  • #前后端分离# 头条发布系统
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • $refs 、$nextTic、动态组件、name的使用
  • (2)(2.10) LTM telemetry
  • (26)4.7 字符函数和字符串函数
  • (C#)获取字符编码的类
  • (solr系列:一)使用tomcat部署solr服务
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (四)JPA - JQPL 实现增删改查
  • (一)基于IDEA的JAVA基础10
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET Core 中的路径问题
  • .NET处理HTTP请求
  • .NET值类型变量“活”在哪?
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • /*在DataTable中更新、删除数据*/
  • @Not - Empty-Null-Blank
  • @Transactional 竟也能解决分布式事务?
  • [20150321]索引空块的问题.txt