=== ===

这里放传送门

=== ===

题解

一开始写这个题的时候看到什么“可以任意选择起点”还“可以停一秒”还有什么“奇数秒偶数秒”就感到八脸懵逼。。。实际上它说的“周围格子会消失”就是在告诉你如果对格子黑白染色,选了一个格子周围跟它颜色不同的那些格子就都不能选了,它说的“可以任意选择起点”还有“可以停一秒”就是在告诉你每次选择的时候可以任意决定当前选择黑点还是白点。并且如果它不能任意选择起点或者不能停一秒的话结果就没有可变性了还做个毛线。。那这就变成了一个显然的最小割问题,最后用所有格子的价值之和减去最小割就是答案。

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#define inc(x)(x=(x%100000)+1)
#define inf 1000000000
using namespace std;
int n,m,cnt,tot,a[110][110],num[110][110],p[10010],S,T,sum,Flow,cur[10010],d[10010];
struct edge{int to,flw,nxt;
}e[500010];
void add(int from,int to,int flow){e[tot].to=to;e[tot].flw=flow;e[tot].nxt=p[from];p[from]=tot++;
}
bool Bfs(){int q[100010],head,tail;memset(d,-1,sizeof(d));head=0;tail=1;for (int i=S;i<=T;i++) cur[i]=p[i];q[tail]=S;d[S]=0;while (head!=tail){int u;inc(head);u=q[head];for (int i=p[u];i!=-1;i=e[i].nxt)if (e[i].flw>0&&d[e[i].to]==-1){int v=e[i].to;d[v]=d[u]+1;inc(tail);q[tail]=v;}}return d[T]!=-1;
}
int Dinic(int u,int Min){if (u==T||Min==0) return Min;int r;for (int i=cur[u];i!=-1;i=e[i].nxt){int v=e[i].to;cur[u]=i;if (e[i].flw>0&&d[v]==d[u]+1&&(r=Dinic(v,min(Min,e[i].flw)))){e[i].flw-=r;e[i^1].flw+=r;return r;}}return 0;
}
int main()
{memset(p,-1,sizeof(p));scanf("%d%d",&n,&m);for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){scanf("%d",&a[i][j]);num[i][j]=++cnt;sum+=a[i][j];}S=0;T=n*m+1;for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)if ((i+j)%2==0){int w=num[i][j];add(S,w,a[i][j]);add(w,S,0);if (i!=n){add(w,num[i+1][j],inf);add(num[i+1][j],w,0);}if (j!=m){add(w,num[i][j+1],inf);add(num[i][j+1],w,0);}if (i!=1){add(w,num[i-1][j],inf);add(num[i-1][j],w,0);}if (j!=1){add(w,num[i][j-1],inf);add(num[i][j-1],w,0);}}else{add(num[i][j],T,a[i][j]);add(T,num[i][j],0);}while (Bfs()){int r;while (r=Dinic(S,0x7fffffff))Flow+=r;}printf("%d\n",sum-Flow);return 0;
}

[BZOJ1324]Exca王者之剑(最小割)相关推荐

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

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

  2. [bzoj1324]Exca王者之剑

    Exca王者之剑 Time Limit: 10 Sec  Memory Limit: 162 MB [Submit][Status][Discuss] Description   Input 第一行给 ...

  3. bzoj1324 Exca王者之剑(构造+最小割)

    论文题. 大概就是首先可以发现只有偶数时刻才有可能吃到宝石,然后相邻的格子内的宝石不可能都吃到.然后就想到了最大点权独立集,然后构造证明任意独立集都可以实现.详见2007Amber国家队论文. #in ...

  4. bzoj1324: Exca王者之剑

    传送门 将图染色后大力跑最小点权点覆盖(四个方向) 答案=总权值-最小点权点覆盖. #include<cmath> #include<cstdio> #include<c ...

  5. BZOJ 1324: Exca王者之剑/BZOJ 1475: 方格取数 最大权独立集 最小割

    1324: Exca王者之剑 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 618  Solved: 310 [Submit][Status][Di ...

  6. (最小割)洛谷P4474 王者之剑

    洛谷P4474 王者之剑 思路: 显然求二分图最大权独立点集. 把点进行黑白染色. SSS向白点建边,权值为vi,jv_{i,j}vi,j​; 白点向周围的黑点建边,权值为infinfinf; 黑点向 ...

  7. 网络流最小割 王者之剑

    传送门 不用考虑走的方法,因为一旦合法,即不同时取相邻的两个,一定能达到. 所以只用考虑怎么取就行了. 把棋盘黑白染色,S到黑点建权值为val的边,白点到T建权值为val的边, 然后把相邻的黑白点建一 ...

  8. 【bzoj1324】Exca王者之剑(8-9 方格取数问题)

    *题目描述: 在一个有m*n (m,n<=100)个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法, ...

  9. 【图论】【网络流】最小割模型

    最小割 最小割应用--01规划问题 最优标号 网络战争 最大权闭合图 最大获利 最大密度子图 生活的艰辛 二分图之最小点权覆盖集 有向图破坏 二分图之最大点权独立集 王者之剑 建图实战 有线电视网络 ...

最新文章

  1. RH5.4下samba共享配置实例(3)
  2. MySQL通过两表避免回表_mysql利用覆盖索引避免回表优化查询
  3. js reduce实现中间件_MapReduce 模型
  4. 【POJ - 2785】4 Values whose Sum is 0 (二分,折半枚举)
  5. MUI 地址选择器 - picker使用
  6. Ubuntu 19.10 将于本月结束生命周期
  7. 使用github page + Hexo搭建个人博客折腾记
  8. 蓝桥杯 ADV-136算法提高 大数加法
  9. 学习git: 忽略某些文件(夹)的跟踪
  10. JAVA8 之 Stream sorted() 示例
  11. 语音通话视频通话前端_无需互联网即可进行数十亿视频通话
  12. linux系统如何使用qq,Linux系统中怎么使用QQ
  13. ddr3配置 dsp6678_DSP6678DDR配制方法
  14. 查看动态库.dll是多少位的
  15. java项目-第91期基于ssm的蛋糕商城系统
  16. Hystrix学习——(2)雪崩效应
  17. 重新认识java(五) ---- 面向对象之多态(向上转型与向下转型)
  18. 张益唐被曝已证明黎曼猜想相关问题,震动数学界
  19. 【c++ -- 谓词】
  20. PCIe 均衡技术介绍(电气物理篇)

热门文章

  1. 利用LateX让拉丁字母和希腊字母变成数学符号
  2. mysql 数据库连接池查询
  3. 写一份关于数字化转型的MBA开题报告
  4. U-Mail邮件系统安全攻略之邮件监控
  5. WebRTC系列-漏桶算法FrameDropper
  6. 流媒体协议介绍(RTP/RTCP/RTSP/MMS/HLS/HTTP progressive streaming)
  7. facebook开源项目全景投影转换Transform360
  8. Windows10系统打开任务管理器的方式
  9. View的透明度,设置view透明度setAlpha 及 Alpha透明度渐变动画
  10. 树莓派lite版开机注意事项