hdu1569
题解:
网络流
最大权独立集=总和-最大流
然后构图
代码:
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
int num,k,dis[N],t,ans,q[N],fi[N],ne[N],ans1,zz[N],sl[N],n,m,a[][];
void jb(int x,int y,int z)
{
ne[num]=fi[x];
fi[x]=num;
zz[num]=y;
sl[num++]=z;
swap(x,y);
z=;
ne[num]=fi[x];
fi[x]=num;
zz[num]=y;
sl[num++]=z;
}
int bfs()
{
memset(dis,0xff,sizeof dis);
dis[]=;
int l=,r=;
q[]=;
while (l<r)
{
int j=q[++l];
for (int i=fi[j];i!=-;i=ne[i])
if (dis[zz[i]]<&&sl[i]>)
{
dis[zz[i]]=dis[j]+;
q[++r]=zz[i];
}
}
if (dis[n]>)return ;
return ;
}
int find(int x,int low)
{
int b=;
if (x==n)return low;
for (int i=fi[x];i!=-;i=ne[i])
if (sl[i]>&&dis[zz[i]]==dis[x]+&&(b=find(zz[i],min(low,sl[i]))))
{
sl[i]-=b;
sl[i^]+=b;
return b;
}
return ;
}
void doit()
{
memset(fi,-,sizeof fi);
memset(a,,sizeof a);
memset(sl,,sizeof sl);
ans1=ans=;num=;
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
{
scanf("%d",&a[i][j]);
ans1+=a[i][j];
if ((i+j)&)jb(,(i-)*m+j+,a[i][j]);
else jb((i-)*m+j+,n*m+,a[i][j]);
}
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
if ((i+j)&)
{
if (i!=)jb((i-)*m+j+,(i-)*m+j+,1e9);
if (i!=n)jb((i-)*m+j+,i*m+j+,1e9);
if (j!=)jb((i-)*m+j+,(i-)*m+j,1e9);
if (j!=m)jb((i-)*m+j+,(i-)*m+j+,1e9);
}
int t;ans=;
n=n*m+;
while (bfs())
while (t=find(,1e9))ans+=t;
printf("%d\n",ans1-ans);
}
int main()
{
while (~scanf("%d%d",&n,&m))doit();
}
hdu1569的更多相关文章
- hdu1565+hdu1569(最大点权独立集)
传送门:hdu1565 方格取数(1) 传送门:hdu1569 方格取数(2) 定理:1. 最小点权覆盖集=最小割=最大流2. 最大点权独立集=总权-最小点权覆盖集 步骤: 1. 先染色,取一个点染白 ...
- hdu1569 方格取数(2) 最大点权独立集=总权和-最小点权覆盖集 (最小点权覆盖集=最小割=最大流)
/** 转自:http://blog.csdn.net/u011498819/article/details/20772147 题目:hdu1569 方格取数(2) 链接:https://vjudge ...
- HDU1569 方格取数(2) —— 二分图点带权最大独立集、最小割最大流
题目链接:https://vjudge.net/problem/HDU-1569 方格取数(2) Time Limit: 10000/5000 MS (Java/Others) Memory L ...
- HDU1569+最大点权集
/* 最大点权独立集=总权值-最小点权覆盖集 最大点权独立集=最大流 最小点权覆盖集=最小割 题意: 给你一个m*n的格子的棋盘,每个格子里面有一个非负数. 从中取出若干个数,使得任意的两个数所在的格 ...
- hdu1569 莫比乌斯反演
hdu 1695 莫比乌斯反演 给出a,b,c,d,k, 求满足a <= x <= b && c <= y <= d && gcd(x,y)=k ...
- HDU1569 最大流(最大点权独立集)
方格取数(2) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- hdu1569 方格取数 求最大点权独立集
题意:一个方格n*m,取出一些点,要求两两不相邻,求最大和.思路:建图,相邻的点有一条边,则建立了一个二分图,求最大点权独立集(所取点两两无公共边,权值和最大),问题转化为求总权和-最小点权覆盖集(点 ...
- HDU 1565 - 方格取数(1) - [状压DP][网络流 - 最大点权独立集和最小点权覆盖集]
题目链接:https://cn.vjudge.net/problem/HDU-1565 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32 ...
- HDU1565 方格取数(1) —— 状压DP or 插头DP(轮廓线更新) or 二分图点带权最大独立集(最小割最大流)
题目链接:https://vjudge.net/problem/HDU-1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others) Memory L ...
随机推荐
- ASP.NET Core EF 查询获取导航属性值,使用Include封装
// 引用 using Microsoft.EntityFrameworkCore; // 摘要: // Specifies related entities to include in the qu ...
- jvm2
垃圾回收器的实现: 1.让用户都暂停,不再产生垃圾,就去收集垃圾.新生代用复制算法清理垃圾,老生代用标记整理算法搜集垃圾. 优秀的算法:服务端默认是CMS收集器. %..jvm案例演示 内存: Jco ...
- NRF24L01——工作原理解读
源: NRF24L01——工作原理解读
- logstash运输器以及kibana的更多操作
为了达到不会因为ELK中的某一项组件因为故障而导致整个ELK工作出问题,于是 将logstash收集到的数据存入到消息队列中如redis,rabbitMQ,activeMQ或者kafka,这里以red ...
- kali安装机场v2ray客户端
为了方便查找资料,之前安装的ssr在kali上面,感觉速度不怎么快,相比windows和android上慢很多,所以打算在kali上面装个机场试试,看官方介绍说机场比ssr速度更快,下面是安装步骤: ...
- MySQL中变量的用法——LeetCode 178. Rank Scores
Write a SQL query to rank scores. If there is a tie between two scores, both should have the same ra ...
- log4j2按日志级别输出到指定文件
在项目中,可能会产生非常多的日志记录,为了方便日志分析,一般可以将日志按级别输出到指定文件,本次就先说说log4j2的实现吧: 1.先加入log4j2依赖包 2.写一个java类进行测试,类文件中仅仅 ...
- PHP爬取知乎日报图片显示不了问题
在爬取知乎日报的内容时,虽然能拿到图片的地址,在窗口中也能打开图片,但是在前端却显示不了,报403错误. 经查证,这是因为知乎对图片做了防盗链处理,其中一个解决方法是添加meta标签: <met ...
- C# Nginx平滑加权轮询算法
代码很简单,但算法很经典,话不多说,直接上代码. public struct ServerConfig { /// <summary> /// 初始权重 /// </summary& ...
- jsp选项卡导航实现——模板
效果 刚进来页面的样子 在第二个选项卡上方时 点击后 离开 同样第三个 点击 移走鼠标 代码 <%@ page contentType="text/html;charset=UTF-8 ...