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 ...
随机推荐
- java线程异常处理方法
工作中常发现有些程序发生异常但却没有错误日志,原因就是一些开发线程异常处理错误,导致程序报错但异常信息打印到堆栈上,不好在生产环境中定位问题. 在java多线程程序中,所有线程都不允许抛出未捕获的ch ...
- Antenna Placement(二分图的最大匹配)
http://poj.org/problem?id=3020 题意: 一个矩形中,有N个城市'*',现在这n个城市都要覆盖无线,若放置一个基站,它至多可以覆盖相邻的两个城市.问至少放置多少个基站才能使 ...
- JS连续滚动幻灯片:原理与实现
什么是连续滚动幻灯片?打开一些网站的首页,你会发现有一块这样的区域:一张图片,隔一段时间滑动切换下一张:同时,图片两端各有一个小按钮,供你手动点选下一张:底部有一排小圆圈,供你选定特定的某帧图片.这就 ...
- python - 解决 ModuleNotFoundError: No module named 'pip'
1.pip的版本为 9.0.3 想用 pip install -U pip 更新下包,但是在更新过程中出现了报错,如下所示: 2.然后尝试用pip install pandas包,提示 Module ...
- Akka源码分析-官方文档说明
如果有小伙伴在看官方文档的时候,发现有些自相矛盾的地方,不要怀疑,可能是官方文档写错了或写的不清楚,毕竟它只能是把大部分情况描述清楚.开源代码一直在更新,官方文档有没有更新就不知道了,特别是那些官方不 ...
- oracle 误删数据
insert into hr.job_history select * from hr.job_history as of timestamp to_timestamp('2007-07-23 10: ...
- RocketMQ(1)--helloworld
双Master方式: 服务器环境 序号 IP 角色 模式 1 192.168.32.135 nameServer1,brokerServer1 Master1 2 192.168.32.136 na ...
- PKUSC2017 游记 密码:blog密码
退役之前,写点破事乐呵乐呵 省选滚大粗 报了PKU和THU的SC 果然THU直接审核不通过... 于是就来到了PKU 滚粗狗就又续命几天. Day1 上午考数学 喜闻乐见啥都不会 出来一对题 ...
- Zookeeper概念学习系列之zookeeper的角色
详细,见如下图 1.领导者(leader) : 负责进行投票的发起和决议,更新系统状态. 2.学习者(learner): 包括跟随者(follower)和观察者(observer). 跟随者(foll ...
- 6.11---swagger文件上传的写法【照着写就行了,主要是需要声明contentType未mutilpart---如果不设置这个,就无法识别文件的】
MultipartFile 是直接接收前台传过来的文件,File是抽象出来的文件对象,用来表示文件,一般操作都是操作的File,所以需要将MultipartFile转为File controller写 ...