首先要明白图论的几个定义:

点覆盖、最小点覆盖:

  点覆盖集即一个点集,使得所有边至少有一个端点在集合里。或者说是“点” 覆盖了所有“边”。。

最小点覆盖(minimum vertex covering):

  点最少的点覆盖。

点覆盖数(vertex covering number):

  最小点覆盖的点数。

独立集:

  独立集即一个点集,集合中任两个结点不相邻,则称V为独立集。或者说是导出的子图是零图(没有边)的点集。

最大独立集(maximum independent set):

  点最多的独立集。

独立数(independent number):

  最大独立集的点。

若把上面最小点覆盖和最大独立集中的端点数改成点的权值,分别就是最小点权覆盖和最大点权独立集的定义。

然后通过推导,我们可以证明一下公式:(具体证明请看胡伯涛《最小割模型在信息学竞赛中的应用》,这里只考虑应用)

最大点权独立集=总权值-最小点权覆盖集。

最小点权覆盖集=图的最小割值=最大流。

这道题很明显就是求最大点权独立集,所以直接套用公式即可。

建图:如果S与(i+j)%2==0的点相连,(i+j)%2==1的点与T相连,容量为该点的权值。(i+j)%==0与(i+j)%2==1的点相连,容量为无限大。

代码:

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
const int INF=0x3f3f3f3f;
const int N=;
const int M=N*N;
int h[N],gap[N],head[N];
int cnt,n,m,s,t;
int a[N][N];
struct node
{
int v,c,next;
}e[M]; void init()
{
memset(head,-,sizeof(head));
cnt=;
}
void add(int u,int v,int w)
{
e[cnt].v=v,e[cnt].c=w;
e[cnt].next=head[u];head[u]=cnt++;
e[cnt].v=u,e[cnt].c=;
e[cnt].next=head[v];head[v]=cnt++;
}
int dfs(int u,int flow)
{
if(u==t) return flow;
int c=flow,a,i,v,minh=t;
for(i=head[u];i!=-;i=e[i].next)
{
if(e[i].c)
{
v=e[i].v;
if(h[v]==h[u]-)
{
a=min(c,e[i].c);
a=dfs(v,a);
e[i].c-=a;
e[i^].c+=a;
c-=a;
if(h[s]>t) return flow-c;
if(!c) break;
}
minh=min(minh,h[v]);
}
}
if(c==flow)
{
if(--gap[h[u]]==) h[s]=t+;
h[u]=minh+;
++gap[h[u]];
}
return flow-c;
}
int isap()
{
memset(gap,,sizeof(gap));
memset(h,,sizeof(h));
int ans=;gap[]=t+;
while(h[s]<=t)
ans+=dfs(s,INF);
return ans;
}
int main()
{
int i,j,sum;
while(scanf("%d",&n)!=EOF)
{
sum=;init();s=,t=n*n+;
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
{
scanf("%d",&a[i][j]);
sum+=a[i][j];
if((i+j)%==)
{
add(s,(i-)*n+j,a[i][j]);
if(i>) add((i-)*n+j,(i-)*n+j,INF);
if(j>) add((i-)*n+j,(i-)*n+j-,INF);
if(i<n) add((i-)*n+j,(i)*n+j,INF);
if(j<n) add((i-)*n+j,(i-)*n+j+,INF);
}
else
add((i-)*n+j,t,a[i][j]);
}
}
printf("%d\n",sum-isap());
}
return ;
}

HDU 1565 最大点权独立集的更多相关文章

  1. hdu 1565&&hdu 1569 (最大点权独立集)

    题目意思很明确就是选一些没有相连的数字,使和最大,建成二分图后求最大点权独立集,, #include<stdio.h> #include<string.h> const int ...

  2. hdu 4859 最大点权独立集的变形(方格取数的变形)

    /*刚开始不会写,最大点权独立集神马都不知道,在潘神的指导下终于做出来,灰常感谢ps: 和方格取数差不多奇偶建图,对于D必割点权为0,对于.必然不割点权为inf.然后和方格取数差不多的建图 .--.| ...

  3. hdu 3657 最大点权独立集变形(方格取数的变形最小割,对于最小割建图很好的题)

    转载:http://blog.csdn.net/cold__v__moon/article/details/7924269 /* 这道题和方格取数2相似,是在方格取数2的基础上的变形. 方格取数2解法 ...

  4. hdu 3657最大点权独立集变形(方格取数变形)

    /* 分奇偶为二部图,s与奇建图,t与偶建图,权值为当前数的值,如果遇到必取的权值置为inf. 奇偶建边为相邻的权值为2*(x&y):所有数的值-最小点全覆盖. 置为inf意为不能割掉.奇偶边 ...

  5. HDU 1565 方格取数(1)(最大点权独立集)

    http://acm.hdu.edu.cn/showproblem.php?pid=1565 题意: 给你一个n*n的格子的棋盘,每个格子里面有一个非负数. 从中取出若干个数,使得任意的两个数所在的格 ...

  6. HDU 1565 1569 方格取数(最大点权独立集)

    HDU 1565 1569 方格取数(最大点权独立集) 题目链接 题意:中文题 思路:最大点权独立集 = 总权值 - 最小割 = 总权值 - 最大流 那么原图周围不能连边,那么就能够分成黑白棋盘.源点 ...

  7. hdu - 1565 方格取数(1) && 1569 方格取数(2) (最大点权独立集)

    http://acm.hdu.edu.cn/showproblem.php?pid=1565 两道题只是数据范围不同,都是求的最大点权独立集. 我们可以把下标之和为奇数的分成一个集合,把下标之和为偶数 ...

  8. HDU 1565:方格取数(1)(最大点权独立集)***

    http://acm.hdu.edu.cn/showproblem.php?pid=1565 题意:中文. 思路:一个棋盘,要使得相邻的点不能同时选,问最大和是多少,这个问题就是最大点权独立集. 可以 ...

  9. HDU 1569 - 方格取数(2) - [最大点权独立集与最小点权覆盖集]

    嗯,这是关于最大点权独立集与最小点权覆盖集的姿势,很简单对吧,然后开始看题. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1569 Time Limi ...

随机推荐

  1. ASP.NET WebAPI 12 Action的执行

    Action的激活大概可以分为如下两个步骤:Action对应方法的调用,执行结果的协商.在WebAPI中由HttpActionInvoker(System.Web.Http.Controllers)进 ...

  2. bootstrap 弹出框点击其他区域时弹出框不消失选项设置

    默认情况下,bootstrap 弹出框点击其他区域时,弹出框会自动关闭,在很多时候,我们可能会希望达到和原生弹出框一样的效果,避免不小心点击其他区域时弹框自动隐藏,尤其是对于一些复杂的表单,重复填写可 ...

  3. jquery对javascript事件的封装一览

    描述 jquery javascript 鼠标点击某个对象 click() onclick  鼠标双击某个对象 dblclick() ondblclick 元素获得焦点 focus() onfocus ...

  4. 程序中条用其他程序中已经存在的PERFORM

    PARAMETERS p_sub(40) TYPE c. DATA fssub(40) TYPE c. fssub = p_sub. TRY.     PERFORM (fssub) IN PROGR ...

  5. Android实战--短信发送器

    首先设计界面 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t ...

  6. Spring(二)Bean入门

    一.BeanFactory介绍 1.1.Bean: 在Spring技术中是基于组件的 最基本了是最常用的单元 其实实例保存在Spring的容器当中 Bean通常被定义在配置文件当中,Bean实例化由S ...

  7. iOS开发中的一些细节BUG的解决

    这篇博客里我将不定期更新自己遇到的一些细节上的BUG,并提供解决方法,遇到同样问题的童鞋们可以参考交流一下. 1.关于tableView的tableHeaderView 请注意,我这里说的是table ...

  8. Spring概述

    layout: post title: Spring概述 tags: [Java,Spring,IOC,AOP] --- Spring是一个开源的轻量级Java SE(Java 标准版本)/Java ...

  9. abs()函数的返回值问题

    转载原文地址:http://www.cnblogs.com/webary/p/4967868.html 在牛客网看到一道关于abs()函数返回值的题目,见下图,当时还没反应过来,第一反应是:自从我开始 ...

  10. android 小记

    1.INSTALL_FAILED_INSUFFICIENT_STORAGE 手机内存不够,删除部分后即可安装.