BZOJ1324Exca王者之剑BZOJ1475方格取数——二分图最大独立集
题目描述
输入
输出
样例输入
1 2
2 1
样例输出
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
int head[12000];
int next[50000];
int to[50000];
int val[50000];
int d[12000];
int q[12000];
int n,m;
int tot=1;
int ans=0;
int S,T;
int s[200][200];
void add(int x,int y,int v)
{tot++;next[tot]=head[x];head[x]=tot;to[tot]=y;val[tot]=v;tot++;next[tot]=head[y];head[y]=tot;to[tot]=x;val[tot]=0;
}
bool bfs(int S,int T)
{int r=0;int l=0;memset(q,0,sizeof(q));memset(d,-1,sizeof(d));q[r++]=S;d[S]=0;while(l<r){ int now=q[l];for(int i=head[now];i;i=next[i]){if(d[to[i]]==-1&&val[i]!=0){d[to[i]]=d[now]+1;q[r++]=to[i];}}l++;}return d[T]!=-1;
}
int dfs(int x,int flow)
{if(x==T){return flow;}int now_flow;int used=0;for(int i=head[x];i;i=next[i]){if(d[to[i]]==d[x]+1&&val[i]!=0){now_flow=dfs(to[i],min(flow-used,val[i]));val[i]-=now_flow;val[i^1]+=now_flow;used+=now_flow;if(now_flow==flow){return flow;}}}if(used==0){d[x]=-1;}return used;
}
void dinic()
{while(bfs(S,T)==true){ans-=dfs(S,0x3f3f3f);}
}
int main()
{scanf("%d%d",&m,&n);S=n*m+1;T=n*m+2;for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){scanf("%d",&s[i][j]);ans+=s[i][j];if((i+j)%2==0){add(S,n*(i-1)+j,s[i][j]);}else{add(n*(i-1)+j,T,s[i][j]);}}}for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){if((i+j)%2==0){if(i-1>0){add(n*(i-1)+j,n*(i-2)+j,1<<30);}if(j-1>0){add(n*(i-1)+j,n*(i-1)+j-1,1<<30);}if(i+1<=m){add(n*(i-1)+j,n*i+j,1<<30);}if(j+1<=n){add(n*(i-1)+j,n*(i-1)+j+1,1<<30);}}}}dinic();printf("%d",ans);
}
转载于:https://www.cnblogs.com/Khada-Jhin/p/10570906.html
BZOJ1324Exca王者之剑BZOJ1475方格取数——二分图最大独立集相关推荐
- [网络流24题][BZOJ1475]方格取数(最小割)
题目描述 传送门 题解 讲棋盘进行黑白染色,从超级源向所有黑点连边,容量为num:从所有白点向超级汇连边,容量为num:再从所有的黑点向与之相邻的白点连边,容量为INF. 求最小割(最大流)即为答案. ...
- 最小割 ---- 二分图最大独立集(集合冲突模型) ---- 骑士共存 方格取数(网络流24题)
二分图独立集 定理: 二分图最大独立集=n - 二分图最大匹配 其实二分图独立集是特殊的一种最大权闭合子图.我们根据上文"收益"的思想,把选某个点的收益看为1,左部节点为正权点,右 ...
- 【网络流24题】I、 方格取数问题(二分图的最大独立集/最小割)
I. 方格取数问题(二分图的最大独立集/最小割) [问题分析] 二分图点权最大独立集,转化为最小割模型,从而用最大流解决. [建模方法] 首先把棋盘黑白染色,使相邻格子颜色不同,所有黑色格子看做二分图 ...
- 734. [网络流24题] 方格取数问题 二分图点权最大独立集/最小割/最大流
«问题描述: 在一个有m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任 意2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法. «编程任务: 对于给定 ...
- BZOJ 1324: Exca王者之剑/BZOJ 1475: 方格取数 最大权独立集 最小割
1324: Exca王者之剑 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 618 Solved: 310 [Submit][Status][Di ...
- 【BZOJ1475】方格取数 [最小割]
方格取数 Time Limit: 5 Sec Memory Limit: 64 MB [Submit][Status][Discuss] Description 在一个n*n的方格里,每个格子里都有 ...
- XTU 二分图和网络流 练习题 C. 方格取数(1)
C. 方格取数(1) Time Limit: 5000ms Memory Limit: 32768KB 64-bit integer IO format: %I64d Java class ...
- [codevs 1907] 方格取数3
[codevs 1907] 方格取数3 题解: 二分图染色.最大点权独立集. 因为要用到最大独立集的一些思路,故先写了一篇最大独立集的题解:http://blog.csdn.net/qq_211102 ...
- 线性规划与网络流24题●09方格取数问题13星际转移问题
●(做codevs1908时,发现测试数据也涵盖了1907,想要一并做了,但因为"技术"不佳,搞了一上午) ●09方格取数问题(codevs1907 方格取数3) 想了半天,也没 ...
最新文章
- 2022-2028年中国油气勘探工程产业研究及前瞻分析报告
- 一些权限管理方面的文章
- 【Git报错】 ! [rejected] master - master (fetch first)
- 查询慢 跑批慢 性能低怎么办? | 润乾高性能计算专家
- 手工编译Android程序
- 【工作总结】C++ string工具类
- 什么是Servlet?
- 金融工程相关问题积累与解决
- lr分析器的设计与实现_DCGAN原理分析与pytorch实现
- 14.12.1类的特殊成员1
- IntelliJ IDEA+Maven运行apache-storm的LocalCluster例子
- StudioOne5最新版本电音制作软件
- 结构体内存对齐(如何计算结构体的大小)
- Windows 7 激活时提示“系统保留分区未分配驱动器号!”解决方法
- 解锁用户 修改用户登录尝试次数无限
- 磁盘的扩展卷和压缩卷显示灰色,无法使用
- 成为认知高手,要避免这9个认知思维陷阱!
- 过滤器Filter的介绍
- 知识图谱基础入门(一)
- 计算机思维的结构问题,《计算思维的结构》读书笔记