这个其实就是在说明相邻的点不能取,我们发现只要其满足这个条件他总能走出来,那么我们就最小割就是了,我们先黑白染色,S 一排黑点 一排白点 T 对于相邻的点我们就直接中间连INF,于是就满足只要一个点选了,另一个点就不能选,我们跑完最小割就得到了满足相邻的点要么都选要么只选一方的最下舍弃。

#include <cstdio>
#include <cstring>
#define r register
#define Inf 0x7f7f7f7f
using namespace std;
inline int read()
{
r int sum=;
r char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')
{
sum=(sum<<)+(sum<<)+ch-'';
ch=getchar();
}
return sum;
}
int a[][],S,T,n,m;
struct Via
{
int to,next,f;
}c[];
int head[],t=;
inline void add(int x,int y,int z)
{
c[++t].to=y;
c[t].f=z;
c[t].next=head[x];
head[x]=t;
}
inline int Min(int x,int y)
{
return x<y?x:y;
}
int q[],top,tail,deep[];
inline bool bfs()
{
memset(deep,,sizeof(deep));
deep[S]=top=tail=,q[]=S;
while(top<=tail)
{
r int x=q[top++];
if(x==T)return ;
for(r int i=head[x];i;i=c[i].next)
if(c[i].f&&deep[c[i].to]==)
{
deep[c[i].to]=deep[x]+;
q[++tail]=c[i].to;
}
}
return ;
}
int dfs(int x,int v)
{
if(x==T||!v)return v;
r int ret=;
for(r int i=head[x];i;i=c[i].next)
if(c[i].f&&deep[c[i].to]==deep[x]+)
{
r int f=dfs(c[i].to,Min(v,c[i].f));
v-=f,ret+=f,c[i].f-=f,c[i^].f+=f;
if(!v)break;
}
if(!ret)deep[x]=;
return ret;
}
inline int dinic()
{
r int ans=;
while(bfs())ans+=dfs(S,Inf);
return ans;
}
int main()
{
freopen("Excalibur.in","r",stdin);
freopen("Excalibur.out","w",stdout);
n=read(),m=read();
r int ans=;
S=n*m+,T=S+;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
a[i][j]=read(),ans+=a[i][j];
if((i+j)&)
{
add(S,(i-)*m+j,a[i][j]),add((i-)*m+j,S,);
if(i!=)add((i-)*m+j,(i-)*m+j,Inf),add((i-)*m+j,(i-)*m+j,);
if(j!=)add((i-)*m+j,(i-)*m+j-,Inf),add((i-)*m+j-,(i-)*m+j,);
if(i!=n)add((i-)*m+j,i*m+j,Inf),add(i*m+j,(i-)*m+j,);
if(j!=m)add((i-)*m+j,(i-)*m+j+,Inf),add((i-)*m+j+,(i-)*m+j,);
}
else
{
add((i-)*m+j,T,a[i][j]),add(T,(i-)*m+j,);
}
}
printf("%d",ans-dinic());
}

【COGS 2051】王者之剑 最小割的更多相关文章

  1. [COGS 2051] 王者之剑

    Saber大法吼 2051. 王者之剑 ★★★☆   输入文件:Excalibur.in   输出文件:Excalibur.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述 ...

  2. 【BZOJ-1324】Exca王者之剑 最小割

    1324: Exca王者之剑 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 483  Solved: 248[Submit][Status][Disc ...

  3. 图论(二分图最大权独立点集):COGS 2051. 王者之剑

    2051. 王者之剑 ★★★☆   输入文件:Excalibur.in   输出文件:Excalibur.out   简单对比 时间限制:1 s   内存限制:256 MB [题目描述] 这是在阿尔托 ...

  4. [bzoj1324]Exca王者之剑_最小割

    Exca王者之剑 bzoj-1324 题目大意:题目链接. 注释:略. 想法: 最小割经典模型. 所有格子向源点连权值为格子权值的边. 将棋盘黑白染色后白点反转源汇. 如果两个格子相邻那么黑点向白点连 ...

  5. bzoj 1324 Exca王者之剑(黑白染色,最小割)

    [题意] 两相邻点不能同时选,选一个点集使得权值和最大. 出题人语文好... [思路] 将图进行黑白二染色,然后构建最小割模型. [代码] #include<set> #include&l ...

  6. 【COGS 1873】 [国家集训队2011]happiness(吴确) 最小割

    这是一种最小割模型,就是对称三角,中间双向边,我们必须满足其最小割就是满足题目条件的互斥关系的最小舍弃,在这道题里面我们S表示文T表示理,中间一排点是每个人,每个人向两边连其选文或者选理的价值,中间每 ...

  7. BZOJ 1391: [Ceoi2008]order [最小割]

    1391: [Ceoi2008]order Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1509  Solved: 460[Submit][Statu ...

  8. BZOJ-2127-happiness(最小割)

    2127: happiness(题解) Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1806  Solved: 875 Description 高一 ...

  9. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

随机推荐

  1. 1. tty终端接收数据原理

    1. 串口接收数据原理(以“ls”命令为例) (1) 每个终端设备都有一个接收缓冲区,保存原始数据.shell程序一直在休眠,等待合适的字符: (2) 串口接收到'l'字符,把它保存下来: (3) 串 ...

  2. Django的aggregate()和annotate()函数的区别

    aggregate() aggregate()为所有的QuerySet生成一个汇总值,相当于Count().返回结果类型为Dict. annotate() annotate()为每一个QuerySet ...

  3. Python学习手册之数据类型

    在上一篇文章中,我们介绍了 Python 的异常和文件,现在我们介绍 Python 中的数据类型. 查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/99799 ...

  4. 编译net core时nuget里全部报错,\obj\project.assets.json找不到

    除了Nuget管理设置允许下载缺少的程序包 如果你自己设置的程序包源里有一个源访问不到,则可能出现下面错误,导致所有nuget无法还原. 而且在VS2017里不会出现这个 SDK,特别是你网上下载的其 ...

  5. vTaskDelete(NULL)使用注意事项

    在实际开发过程中,记录犯过的一个错误,如下 vTaskDelete(NULL); iccid_return_num = ; 错误原因分析,在任务删除之后(调用vTaskDelete(NULL)之后), ...

  6. PostgreSQL 10.0 压缩版的 pgAdmin 不能用的问题

    PostgreSQL终于发布10.0正式版了!下载压缩版的更新了一下本机的版本,然后打开pgAdmin的时候总是报错“The application server could not be conta ...

  7. 分分钟搞定redis

    随着科技不断的发展,使用到的技术也是更新换代,大家都知道当一个程序用户量上来之后,必然是要做数据缓存的,那么如何去实现的呢,在之前我们一直使用memcache去做数据缓存,现在众所周知主流的缓存技术已 ...

  8. Linux-OpenSUSE折腾-1(Qt安装,Chrome安装)

    先上图,大蜥蜴还是不错的,偶然看到了大蜥蜴这个系统,我就觉得又可以折腾几天了,先上图 OpenSUSE有一个入门介绍的网站写的相当不错,感兴趣的可以连接过去:https://lug.ustc.edu. ...

  9. 3、shader深度测试(Cull、ZWrite 、ZTest )

    剔除和深度测试是渲染法线中的一个流程 Cull:默认情况下,Unity中给的所有Shader都是单面的,它都把反面的渲染给关闭掉了,如果你在开发的过程中需要使用到双面,只要把cull关闭(off)即可 ...

  10. python 动态函数调用及可变参数传入

    定义类及方法 class ParameterFactory(object): ..... def fullLinkTag(self, fromDate, toDate, status, cate='全 ...