hdu 1569 最大权独立集
/*最大点权独立集=sum-最小点权覆盖*/
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
#define inf 0x3fffffff
#define ll __int64
#define N 3000
struct node
{
ll u,v,w,next;
}bian[N*N*2];
ll ma[N][N],id[N][N],head[N],yong,s,t,dis[N];;
void addedge(ll u,ll v,ll w)
{
bian[yong].u=u;
bian[yong].v=v;
bian[yong].w=w;
bian[yong].next=head[u];
head[u]=yong++;
}
void add(ll u,ll v,ll w)
{
addedge(u,v,w);
addedge(v,u,0);
}
void init()
{
yong=0;
memset(head,-1,sizeof(head));
memset(dis,-1,sizeof(dis));
}
void bfs()
{
ll u,v,i;
queue<ll>q;
q.push(t);
dis[t]=0;
while(!q.empty())
{
u=q.front();
q.pop();
for(i=head[u]; i!=-1; i=bian[i].next)
{
v=bian[i].v;
if(dis[v]==-1)
{
dis[v]=dis[u]+1;
q.push(v);
}
}
}
return ;
}
ll ISAP()
{
ll sum=0;
bfs();
ll gap[N],cur[N],stac[N],top,i;
memset(gap,0,sizeof(gap));
for(i=s; i<=t; i++)
{
gap[dis[i]]++;
cur[i]=head[i];
}
ll k=s;
top=0;
while(dis[s]<t+1)
{
if(k==t)
{
ll minn=inf,index;
for(i=0; i<top; i++)
{
ll e=stac[i];
if(minn>bian[e].w)
{
minn=bian[e].w;
index=i;
}
}
for(i=0; i<top; i++)
{
ll e=stac[i];
bian[e].w-=minn;
bian[e^1].w+=minn;
}
sum+=minn;
top=index;
k=bian[stac[top]].u;
}
for(i=cur[k]; i!=-1; i=bian[i].next)
{
ll v=bian[i].v;
if(bian[i].w&&dis[k]==dis[v]+1)
{
cur[k]=i;
k=v;
stac[top++]=i;
break;
}
}
if(i==-1)
{
ll m=t+1;
for(i=head[k]; i!=-1; i=bian[i].next)
if(m>dis[bian[i].v]&&bian[i].w)
{
m=dis[bian[i].v];
cur[k]=i;
}
if(--gap[dis[k]]==0)break;
gap[dis[k]=m+1]++;
if(k!=s)
k=bian[stac[--top]].u;
}
}
return sum;
}
int main()
{
ll n,m,i,j,cnt;
ll sum;
while(scanf("%I64d%I64d",&n,&m)!=EOF)
{
init();
cnt=1;
sum=0;s=0;t=n*m+1;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
{
scanf("%I64d",&ma[i][j]);
id[i][j]=cnt++;
sum+=ma[i][j];
}
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
{
if((i+j)&1)
{
add(s,id[i][j],ma[i][j]);
if(i<=n-1)
add(id[i][j],id[i+1][j],inf);
if(j<=m-1)
add(id[i][j],id[i][j+1],inf);
if(i>=2)
add(id[i][j],id[i-1][j],inf);
if(j>=2)
add(id[i][j],id[i][j-1],inf);
}
else
add(id[i][j],t,ma[i][j]);
}
printf("%I64d\n",sum-ISAP());
}
return 0;
}
hdu 1569 最大权独立集的更多相关文章
- hdu 1565&&hdu 1569 (最大点权独立集)
题目意思很明确就是选一些没有相连的数字,使和最大,建成二分图后求最大点权独立集,, #include<stdio.h> #include<string.h> const int ...
- HDU 1569 方格取数(2)(最大流最小割の最大权独立集)
Description 给你一个m*n的格子的棋盘,每个格子里面有一个非负数. 从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取数所在的2个格子不能相邻,并且取出的数的和最大. ...
- hdu 1565&hdu 1569(网络流--最小点权值覆盖)
方格取数(1) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- CF1404E Bricks (最大权独立集)
考虑把答案进行转化,通过分矩形条,我们能去掉一些夹在#之间的边 那么答案= #个数 - 能去掉的边个数 但去掉是有限制的,同一个#格子的横边和竖边不能同时去掉 把边转化成点,限制变成边. 横竖边的点 ...
- HDU 1569 - 方格取数(2) - [最大点权独立集与最小点权覆盖集]
嗯,这是关于最大点权独立集与最小点权覆盖集的姿势,很简单对吧,然后开始看题. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1569 Time Limi ...
- HDU 1569 方格取数(2)
方格取数(2) Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 15 ...
- Assignment (HDU 2853 最大权匹配KM)
Assignment Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu 3061 hdu 3996 最大权闭合图 最后一斩
hdu 3061 Battle :一看就是明显的最大权闭合图了,水提......SB题也不说边数多少....因为开始时候数组开小了,WA....后来一气之下,开到100W,A了.. hdu3996. ...
- HDU 1565 最大点权独立集
首先要明白图论的几个定义: 点覆盖.最小点覆盖: 点覆盖集即一个点集,使得所有边至少有一个端点在集合里.或者说是“点” 覆盖了所有“边”.. 最小点覆盖(minimum vertex covering ...
随机推荐
- 搭建Git服务器(转载)
转自:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770360 ...
- PCB SVN 服务端VisualSVN Server与TortoiseSVN
PCB 工程系统SVN源代码招病毒破坏以后,一周时间都没有源代码同步更新了,今天终于将SVN源代码数据恢复并重建SVN服务器,这里将SVN搭建安装过程整理如下 一.服务端SVN安装 1.下载地址:ht ...
- redis cluster集群理解
Redis Cluster集群 一.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Re ...
- Java系列学习(九)-多态
1.final关键字 (1)最终的意思, 可以修饰类,方法,变量 (2)特点: A:它修饰的类,不能被继承 B:它修饰的方法,不能被重写(覆盖) C:它修饰的变量,这个变量其实是一个常量 [扩展] ① ...
- Java系列学习(一)-JDK下载与安装
1.Java语言平台版本 J2SE:Java 2 Platform Standard Edition,java平台标准版 J2ME:Java 2 Platform Micro Edition,java ...
- js基础---元素操作时字符串拼接
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- xml操作-Nested exception: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId. 异常处理
异常如下: org.dom4j.DocumentException: Error on line 2 of document file:///D:/workspaces/struts2/lesson0 ...
- html5——渐变
线性渐变 <style> div { width: 700px; height: 100px; /*方向:从右向左*/ /*起始颜色:黄色*/ /*终止颜色:绿色*/ background ...
- CSS——盒子居中显示
嵌套中个的子盒子使用了绝对定位,父盒子使用了相对定位.那么子盒子如何居中显示: 1.距离左偏离50% 2.margin-right子盒子宽度的一半 <!DOCTYPE html> < ...
- day10-函数基础知识
函数 什么是函数 把工具事先准备好,然后下次使用的时候,直接使用就行了.我们的函数就是工具 为何用函数 1.遇到重复的功能只能重复编写实现代码,代码冗余 2.功能需要扩展时,需要找出所有实现该功能的地 ...