常见套路:棋盘黑白染色,就变成了一张二分图

然后如果选了黑点,四周的白点就不能选了,也是最小割的套路。先把所有价值加起来,再减掉一个最少的不能选的价值,也就是割掉表示不选

建边(S,黑点i,v[i]),(黑点i,i四周的白点,inf),(白点j,T,v[j])

(黑点还是白点,你必须要割一个...)

  1. #include<bits/stdc++.h>
  2. #define pa pair<int,int>
  3. #define CLR(a,x) memset(a,x,sizeof(a))
  4. using namespace std;
  5. typedef long long ll;
  6. const int maxn=*+,maxm=**+,inf=1e9;
  7.  
  8. inline ll rd(){
  9. ll x=;char c=getchar();int neg=;
  10. while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
  11. while(c>=''&&c<='') x=x*+c-'',c=getchar();
  12. return x*neg;
  13. }
  14.  
  15. struct Edge{
  16. int a,b,l,ne;
  17. }eg[maxm];
  18. int egh[maxn],ect=,cur[maxn];
  19. int N,M,S,T;
  20. int dep[maxn];
  21. queue<int> q;
  22.  
  23. inline void adeg(int a,int b,int c){
  24. // printf("!%d %d %d\n",a,b,c);
  25. eg[++ect].a=a,eg[ect].b=b,eg[ect].l=c,eg[ect].ne=egh[a],egh[a]=ect;
  26. eg[++ect].a=b,eg[ect].b=a,eg[ect].l=,eg[ect].ne=egh[b],egh[b]=ect;
  27. }
  28.  
  29. inline bool bfs(){
  30. CLR(dep,);CLR(cur,-);
  31. dep[S]=,q.push(S);
  32. while(!q.empty()){
  33. int p=q.front();q.pop();
  34. for(int i=egh[p];i;i=eg[i].ne){
  35. int b=eg[i].b;
  36. if(!eg[i].l||dep[b]) continue;
  37. dep[b]=dep[p]+;
  38. q.push(b);
  39. }
  40. }
  41. return dep[T];
  42. }
  43.  
  44. int dinic(int x,int y){
  45. if(x==T) return y;
  46. if(cur[x]==-) cur[x]=egh[x];
  47. int tmp=y;
  48. for(int &i=cur[x];i;i=eg[i].ne){
  49. int b=eg[i].b;
  50. if(dep[b]!=dep[x]+||!eg[i].l) continue;
  51. int re=dinic(b,min(tmp,eg[i].l));
  52. tmp-=re,eg[i].l-=re,eg[i^].l+=re;
  53. if(!tmp) break;
  54. }return y-tmp;
  55. }
  56. int main(){
  57. //freopen("","r",stdin);
  58. int i,j,k;
  59. M=rd(),N=rd();
  60. S=N*M+,T=N*M+;
  61. int ans=;
  62. for(i=;i<=M;i++){
  63. for(j=;j<=N;j++){
  64. int id=(i-)*N+j;
  65. k=rd();ans+=k;
  66. if(((i&)&&(j&))||(!(i&)&&!(j&))){
  67. adeg(S,id,k);
  68. if(j<N) adeg(id,id+,inf);
  69. if(j>) adeg(id,id-,inf);
  70. if(i<M) adeg(id,id+N,inf);
  71. if(i>) adeg(id,id-N,inf);
  72. }else adeg(id,T,k);
  73. }
  74. }
  75. while(bfs()) ans-=dinic(S,inf);
  76. printf("%d\n",ans);
  77. return ;
  78. }

luogu2774 [网络流24题]方格取数问题 (最小割)的更多相关文章

  1. AC日记——[网络流24题]方格取数问题 cogs 734

    734. [网络流24题] 方格取数问题 ★★☆   输入文件:grid.in   输出文件:grid.out   简单对比时间限制:1 s   内存限制:128 MB «问题描述: 在一个有m*n ...

  2. Cogs 734. [网络流24题] 方格取数问题(最大闭合子图)

    [网络流24题] 方格取数问题 ★★☆ 输入文件:grid.in 输出文件:grid.out 简单对比 时间限制:1 s 内存限制:128 MB «问题描述: 在一个有m*n 个方格的棋盘中,每个方格 ...

  3. [网络流24题] 方格取数问题/骑士共存问题 (最大流->最大权闭合图)

    洛谷传送门 LOJ传送门 和太空飞行计划问题一样,这依然是一道最大权闭合图问题 “骑士共存问题”是“方格取数问题”的弱化版,本题解不再赘述“骑士共存问题”的做法 分析题目,如果我们能把所有方格的数都给 ...

  4. [网络流24题] 方格取数问题(cogs 734)

    «问题描述:在一个有m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法.«编程任务:对于给定的方格棋 ...

  5. HDU 1569 方格取数(2) (最小割)

    方格取数(2) Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  6. LuoguP2774 方格取数问题(最小割)

    题目背景 none! 题目描述 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法.对于 ...

  7. 洛谷P2774 方格取数问题(最小割)

    题意 $n \times m$的矩阵,不能取相邻的元素,问最大能取多少 Sol 首先补集转化一下:最大权值 = sum - 使图不连通的最小权值 进行黑白染色 从S向黑点连权值为点权的边 从白点向T连 ...

  8. P2762 [网络流24题]太空飞行计划问题(最小割)

    地址 最大权闭合子图裸题,不说了吧,求方案就是把s集遍历一遍. 错误记录:dfs那块忘判断残量了,11分×1. #include<cstdio> #include<iostream& ...

  9. XTU 二分图和网络流 练习题 C. 方格取数(1)

    C. 方格取数(1) Time Limit: 5000ms Memory Limit: 32768KB 64-bit integer IO format: %I64d      Java class ...

随机推荐

  1. Nginx URL后面不加斜杠301重定向

    今天开发碰到一个问题,其实之前就有这个问题,但是一直都没去关注,今天测试碰到了就解决一下. 问题情况: 当我请求 http://admindev.jingruiauto.com/store/views ...

  2. 【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--参数自动映射篇(6/8)

    文章目录 前情概要 路由.action的扫描.发现.注册搞定之后,后来我发现在我们的action里面获取参数往往都是通过request对象来一个一个获取.同样的一行代码我们不厌其烦的重复写了无数次.遂 ...

  3. mysql 编码和汉字存储占用字节问题的探索

    MySql 5.5 之前,UTF8 编码只支持1-3个字节,只支持BMP这部分的unicode编码区,BMP是从哪到哪?基本就是 0000 ~ FFFF 这一区. 从MySQL 5.5 开始,可支持4 ...

  4. LINUX内核分析第八周学习总结——进程的切换和系统的一般执行过程

    LINUX内核分析第八周学习总结——进程的切换和系统的一般执行过程 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/c ...

  5. LINUX内核分析第七周学习总结

    LINUX内核分析第七周学习总结 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.c ...

  6. 安装mysql解压版时遇到的错误

    平常都是使用exe安装mysql,今天使用解压包的,遇到了一系列问题: 环境:win10 mysql版本:mysql-5.7.21-winx64 开始一直用该网页的教程 https://www.cnb ...

  7. js数组的用法

    1.数组 - - 添加元素 arr.push('abc')  向数组尾部添加元素,返回值为数组的长度 arr.unshift('abc')  向数组头部添加元素,返回值为数组的长度 2.数组 - - ...

  8. The import * cannot be resolved

    背景 使用eclipse jee做练习的时候,下载了老师的项目源码.考虑到老师用的时myeclipse,目录结构略有不同,所有不想直接导入项目,又考虑到,可能环境不一样,会出现这样那样的问题,所以我的 ...

  9. [系统软件]Ubuntu 18.04中的Shutter禁用了“编辑”选项解决

    本文引用自linux公社, 原文请点击 : https://www.linuxidc.com/Linux/2018-04/151911.htm   在Ubuntu 18.04中安装了我最喜欢的截图工具 ...

  10. Ubuntu 服务器指南

    https://help.ubuntu.com/lts/serverguide/   Jabber Instant Messaging Server https://help.ubuntu.com/l ...