网址:http://codevs.cn/problem/1907/

  题意:在一个矩阵里选不相邻的若干个数,使这些数的和最大。

  我们可以把它看成一个最小割,答案就是矩阵中的所有数-最小割。先把矩阵按国际象棋棋盘黑白染色(即把相邻的点分别染成白色和黑色),然后黑点连源点,白点连汇点。割掉一个点到源/汇的边就是不选择这个点,最后的目的就是使源到汇不连通(不引发题目不能选择位置相邻的数的矛盾)。

  然而最小割怎么求呢?

  于是我们就要引入一个定理:最大流最小割定理。它的意思就是说,在一个图中,a点到b点的最小割=a到b的最大流。

  然而我并不会证……这里口胡一个想法:最大流就是沿着剩余网络不断地流,每流一次相当于删掉剩余网络的一条边,流到不能流为止。而最小割也是不断地割直到不连通。于是最小割=最大流。

  答案就这样变成了求最大流。

  具体怎么建图,就是把黑/白点到源/汇的边的流量定为这个位置的上数,而黑白点之间的边,因为不能把它割掉,所以把它的流量设为一个极大数。

  于是就过了。

  代码:

  1. var a:array[..,..]of longint;
  2. s:array[..,..]of longint;
  3. l,q:array[..]of longint;
  4. n,m,nn,i,j,k,h,t:longint;
  5. ans,sum:int64;
  6. function num(x,y:longint):longint;
  7. begin
  8. exit((x-)*m+y);
  9. end;
  10. function dfs(now,ll:longint):longint;
  11. var p,i:longint;
  12. begin
  13. if now=nn then exit(ll);
  14. for i:= to nn do
  15. if(a[now,i]>)and(l[i]=l[now]+)then begin
  16. if a[now,i]<ll then p:=dfs(i,a[now,i])
  17. else p:=dfs(i,ll);
  18. a[now,i]:=a[now,i]-p; a[i,now]:=a[i,now]+p;
  19. if p> then exit(p);
  20. end;
  21. exit();
  22. end;
  23. begin
  24. read(n,m); sum:=;
  25. for i:= to n do
  26. for j:= to m do begin
  27. read(s[i,j]);
  28. sum:=sum+s[i,j];
  29. end;
  30. fillchar(a,sizeof(a),);
  31. for i:= to n do
  32. for j:= to m do
  33. if (i+j)and = then a[num(i,j),n*m+]:=s[i,j]
  34. else begin
  35. if i> then a[num(i,j),num(i-,j)]:=<<;
  36. if i<n then a[num(i,j),num(i+,j)]:=<<;
  37. if j> then a[num(i,j),num(i,j-)]:=<<;
  38. if j<m then a[num(i,j),num(i,j+)]:=<<;
  39. a[,num(i,j)]:=s[i,j];
  40. end;
  41. nn:=n*m+; ans:=;
  42. while true do begin
  43. fillchar(l,sizeof(l),);
  44. h:=; t:=; q[]:=; l[]:=;
  45. repeat
  46. for i:= to nn do
  47. if(a[q[h],i]>)and(l[i]=)then begin
  48. inc(t); q[t]:=i; l[i]:=l[q[h]]+;
  49. end;
  50. inc(h);
  51. until h>t;
  52. if l[nn]= then break;
  53. repeat
  54. k:=dfs(,<<);
  55. ans:=ans+k;
  56. until k=;
  57. end;
  58. writeln(sum-ans);
  59. end.

codevs1907方格取数

【codevs1907】方格取数3(最大流最小割定理)的更多相关文章

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

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

  2. [BZOJ1475]方格取数 网络流 最小割

    1475: 方格取数 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1025  Solved: 512[Submit][Status][Discuss] ...

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

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

  4. codevs1907 方格取数 3

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

  5. 【bzoj1475】方格取数 网络流最小割

    题目描述 在一个n*n的方格里,每个格子里都有一个正整数.从中取出若干数,使得任意两个取出的数所在格子没有公共边,且取出的数的总和尽量大. 输入 第一行一个数n:(n<=30) 接下来n行每行n ...

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

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

  7. luogu2774 [网络流24题]方格取数问题 (最小割)

    常见套路:棋盘黑白染色,就变成了一张二分图 然后如果选了黑点,四周的白点就不能选了,也是最小割的套路.先把所有价值加起来,再减掉一个最少的不能选的价值,也就是割掉表示不选 建边(S,黑点i,v[i]) ...

  8. 线性规划与网络流24题●09方格取数问题&13星际转移问题

    ●(做codevs1908时,发现测试数据也涵盖了1907,想要一并做了,但因为“技术”不佳,搞了一上午) ●09方格取数问题(codevs1907  方格取数3) 想了半天,也没成功建好图: 无奈下 ...

  9. 「网络流24题」「LuoguP2774」方格取数问题(最大流 最小割

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

随机推荐

  1. Android ADB 命令链接模拟器出现 daemon not running 解决方法

    用adb命令链接远程模拟器 有时候会遇到如下问题: C:Documents and SettingsAdministrator>adb connect 192.168.0.183 * daemo ...

  2. 关于浏览器内核与javascript引擎的一些小知识

    浏览器是我们每天几乎都必须使用的软件产品,可是对于自己每天都接触的浏览器,很多同学其实对其一无所知.今天异次元就跟大家说说关于浏览器内核的一些事儿吧,好让你了解多一点稍微内在的东西. 在下面的文章中主 ...

  3. Native VLAN打上标记

    802.1Q和ISL都知道两者的区别在于前者对native vlan的流量不打标记,而后者统一都打标记. 配置成Native VLAN的Trunk端口,收到Native VLAN的帧后,不打标记直接从 ...

  4. POJ1182食物链(并查集经典好题)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66964#problem/E 题目思路:主要有两种思路:1.带权并查集2.挑战程 ...

  5. echarts+thinkphp 学习写的第一个程序

    一.前台 建个名为map.html,代码如下. <!doctype html><html lang="en"><head> <meta c ...

  6. redo binlog

    w https://dev.mysql.com/doc/refman/5.7/en/innodb-redo-log.html https://dev.mysql.com/doc/refman/5.7/ ...

  7. ehcache.xml配置详解

    一:配置文件案例 <ehcache> <!-- 磁盘存储:将缓存中暂时不使用的对象,转移到硬盘,类似于Windows系统的虚拟内存 path:指定在硬盘上存储对象的路径 --> ...

  8. 洛谷 P3263 [JLOI2015]有意义的字符串

    洛谷 首先,看到\((\frac{(b+\sqrt{d})}{2})^n\),很快能够想到一元二次方程的解\(\frac{-b\pm\sqrt{\Delta}}{2a}\). 所以可以推出,\(\fr ...

  9. Linux中的awk命令

    awk '条件1{动作1} 条件2{动作2} ...'  文件名 条件: BEGIN          在处理文件里的第一行数据之前执行 END              在处理完文件里的最后一行数据 ...

  10. 通过实例来分析I2C基本通信协议

    本文旨在用最通俗易懂的方式.让大家明确I2C通信的过程到底是怎么回事. I2C起源于飞利浦公司的电视设计,但之后朝通用路线发展,各种电子设计都有机会用到I2C 总的来说,I2C能够简单归纳为,两根线, ...