题解:

网络流

最大权独立集=总和-最大流

然后构图

代码:

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. const int N=;
  7. int num,k,dis[N],t,ans,q[N],fi[N],ne[N],ans1,zz[N],sl[N],n,m,a[][];
  8. void jb(int x,int y,int z)
  9. {
  10. ne[num]=fi[x];
  11. fi[x]=num;
  12. zz[num]=y;
  13. sl[num++]=z;
  14. swap(x,y);
  15. z=;
  16. ne[num]=fi[x];
  17. fi[x]=num;
  18. zz[num]=y;
  19. sl[num++]=z;
  20. }
  21. int bfs()
  22. {
  23. memset(dis,0xff,sizeof dis);
  24. dis[]=;
  25. int l=,r=;
  26. q[]=;
  27. while (l<r)
  28. {
  29. int j=q[++l];
  30. for (int i=fi[j];i!=-;i=ne[i])
  31. if (dis[zz[i]]<&&sl[i]>)
  32. {
  33. dis[zz[i]]=dis[j]+;
  34. q[++r]=zz[i];
  35. }
  36. }
  37. if (dis[n]>)return ;
  38. return ;
  39. }
  40. int find(int x,int low)
  41. {
  42. int b=;
  43. if (x==n)return low;
  44. for (int i=fi[x];i!=-;i=ne[i])
  45. if (sl[i]>&&dis[zz[i]]==dis[x]+&&(b=find(zz[i],min(low,sl[i]))))
  46. {
  47. sl[i]-=b;
  48. sl[i^]+=b;
  49. return b;
  50. }
  51. return ;
  52. }
  53. void doit()
  54. {
  55. memset(fi,-,sizeof fi);
  56. memset(a,,sizeof a);
  57. memset(sl,,sizeof sl);
  58. ans1=ans=;num=;
  59. for (int i=;i<=n;i++)
  60. for (int j=;j<=m;j++)
  61. {
  62. scanf("%d",&a[i][j]);
  63. ans1+=a[i][j];
  64. if ((i+j)&)jb(,(i-)*m+j+,a[i][j]);
  65. else jb((i-)*m+j+,n*m+,a[i][j]);
  66. }
  67. for (int i=;i<=n;i++)
  68. for (int j=;j<=m;j++)
  69. if ((i+j)&)
  70. {
  71. if (i!=)jb((i-)*m+j+,(i-)*m+j+,1e9);
  72. if (i!=n)jb((i-)*m+j+,i*m+j+,1e9);
  73. if (j!=)jb((i-)*m+j+,(i-)*m+j,1e9);
  74. if (j!=m)jb((i-)*m+j+,(i-)*m+j+,1e9);
  75. }
  76. int t;ans=;
  77. n=n*m+;
  78. while (bfs())
  79. while (t=find(,1e9))ans+=t;
  80. printf("%d\n",ans1-ans);
  81. }
  82. int main()
  83. {
  84. while (~scanf("%d%d",&n,&m))doit();
  85. }

hdu1569的更多相关文章

  1. hdu1565+hdu1569(最大点权独立集)

    传送门:hdu1565 方格取数(1) 传送门:hdu1569 方格取数(2) 定理:1. 最小点权覆盖集=最小割=最大流2. 最大点权独立集=总权-最小点权覆盖集 步骤: 1. 先染色,取一个点染白 ...

  2. hdu1569 方格取数(2) 最大点权独立集=总权和-最小点权覆盖集 (最小点权覆盖集=最小割=最大流)

    /** 转自:http://blog.csdn.net/u011498819/article/details/20772147 题目:hdu1569 方格取数(2) 链接:https://vjudge ...

  3. HDU1569 方格取数(2) —— 二分图点带权最大独立集、最小割最大流

    题目链接:https://vjudge.net/problem/HDU-1569 方格取数(2) Time Limit: 10000/5000 MS (Java/Others)    Memory L ...

  4. HDU1569+最大点权集

    /* 最大点权独立集=总权值-最小点权覆盖集 最大点权独立集=最大流 最小点权覆盖集=最小割 题意: 给你一个m*n的格子的棋盘,每个格子里面有一个非负数. 从中取出若干个数,使得任意的两个数所在的格 ...

  5. hdu1569 莫比乌斯反演

    hdu 1695 莫比乌斯反演 给出a,b,c,d,k, 求满足a <= x <= b && c <= y <= d && gcd(x,y)=k ...

  6. HDU1569 最大流(最大点权独立集)

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

  7. hdu1569 方格取数 求最大点权独立集

    题意:一个方格n*m,取出一些点,要求两两不相邻,求最大和.思路:建图,相邻的点有一条边,则建立了一个二分图,求最大点权独立集(所取点两两无公共边,权值和最大),问题转化为求总权和-最小点权覆盖集(点 ...

  8. HDU 1565 - 方格取数(1) - [状压DP][网络流 - 最大点权独立集和最小点权覆盖集]

    题目链接:https://cn.vjudge.net/problem/HDU-1565 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32 ...

  9. HDU1565 方格取数(1) —— 状压DP or 插头DP(轮廓线更新) or 二分图点带权最大独立集(最小割最大流)

    题目链接:https://vjudge.net/problem/HDU-1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others)    Memory L ...

随机推荐

  1. Java 为什么要使用反射(通俗易懂的举例)

    Java反射最大的好处就是能在运行期间,获得某个类的结构.成员变量,用来实例化. 下列是具体使用场景:假如我们有两个程序员,一个程序员在写程序的时候,需要使用第二个程序员所写的类,但第二个程序员并没完 ...

  2. java泛型的实现原理

    java泛型的实现原理是类型擦除.Java的泛型是伪泛型.在编译期间,所有的泛型信息都会被擦除掉.   Java中的泛型基本上都是在编译器这个层次来实现的.在生成的Java字节码中是不包含泛型中的类型 ...

  3. ultraedit 查看文件

    转自:https://wenda.so.com/q/1481655902726192 1 UltraEdit在打开文件的时候,会对文件类型进行检查.如果是二进制文件,会自动转为16进制显示模式.如下图 ...

  4. Java读者写者问题

    实验存档. 允许好几个人同时读,但是不允许在有人读的时候写,以及同一时间只能有一个人在写. 读者.java: package operating.entity.readerwriter; import ...

  5. vsftpd搭建ftp服务,并实现虚拟用户访问

    安装vsftpd服务: yum install vsftpd -y [root@wadeson ~]# rpm -ql vsftpd /etc/logrotate.d/vsftpd /etc/pam. ...

  6. Activiti工作流与spring集成

    一.前言 前面Activiti工作流的学习,说明了Activiti的基本应用,在我们开发中可以根据实际的业务参考Activiti的API去更好的理解以及巩固.我们实际的开发中我们基本上都使用sprin ...

  7. 【前端】display: box布局教程 [转]

    css display:box 新属性   一.display:box; 在元素上设置该属性,可使其子代排列在同一水平上,类似display:inline-block;. 二.可在其子代设置如下属性 ...

  8. Springboot-mongodb MongoRepository接口 save方法 详解

    问题: 我们都知道 mongodb 有两种添加数据的方式  一种 就是  save 方法   另外一种 insert  方法 这里两个方法 唯一的区别就是 insert:当主键"_id&qu ...

  9. java高级特性(4)--枚举

    枚举(enum),是指一个经过排序的.被打包成一个单一实体的项列表.一个枚举的实例可以使用枚举项列表中任意单一项的值.枚举在各个语言当中都有着广泛的应用,通常用来表示诸如颜色.方式.类别.状态等等数目 ...

  10. python一个元素全为数的列表做差分

    woc = [7, 5, 7, 3, 5, 1, 2] diff = [ wo[i]-wo[i+1] for i in range(len(wo)-1) ]