Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 591  Solved: 296

Description

 

Input

第一行给出数字N,M代表行列数.N,M均小于等于100 下面N行M列用于描述数字矩阵

Output

输出最多可以拿到多少块宝石

Sample Input

2 2
1 2
2 1

Sample Output

4

HINT

Source

2007Amber国家队论文

图论 网络流

将图二分染色

求最大点权独立集

最大点权独立集就等于总权值和减去最小权值覆盖

最小权值覆盖就是建好二分图以后的最小割

也就是说这是道模板题

然而我居然没有1A,原因是反向弧的流量建成了w而不是0

真鸡儿丢人,我退群吧

  1 /*by SilverN*/
  2 #include<algorithm>
  3 #include<iostream>
  4 #include<cstring>
  5 #include<cstdio>
  6 #include<cmath>
  7 #include<vector>
  8 #include<queue>
  9 using namespace std;
 10 const int INF=0x3f3f3f3f;
 11 const int mxn=100010;
 12 const int mx[5]={0,1,0,-1,0};
 13 const int my[5]={0,0,1,0,-1};
 14 int read(){
 15     int x=0,f=1;char ch=getchar();
 16     while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
 17     while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
 18     return x*f;
 19 }
 20 struct edge{
 21     int v,nxt,f;
 22 }e[mxn<<1];
 23 int hd[mxn],mct=1;
 24 void add_edge(int u,int v,int w){
 25     e[++mct].v=v;e[mct].nxt=hd[u];e[mct].f=w; hd[u]=mct;return;
 26 }
 27 void insert(int u,int v,int w){
 28     add_edge(u,v,w);add_edge(v,u,0);return;
 29 }
 30 queue<int>q;
 31 int d[mxn];
 32 int n,m,S,T;
 33 bool BFS(){
 34     memset(d,0,sizeof d);
 35     d[S]=1;
 36     q.push(S);
 37     while(!q.empty()){
 38         int u=q.front();q.pop();
 39         for(int i=hd[u];i;i=e[i].nxt){
 40             int v=e[i].v;
 41             if(e[i].f && !d[v]){
 42                 d[v]=d[u]+1;
 43                 q.push(v);
 44             }
 45         }
 46     }
 47     return d[T];
 48 }
 49 int DFS(int u,int lim){
 50     if(u==T)return lim;
 51     int f=0,tmp;
 52     for(int i=hd[u],v;i;i=e[i].nxt){
 53         v=e[i].v;
 54         if(d[v]==d[u]+1 && e[i].f && (tmp=DFS(v,min(lim,e[i].f)))){
 55             e[i].f-=tmp;  e[i^1].f+=tmp;
 56             lim-=tmp;   f+=tmp;
 57             if(!lim)return f;
 58         }
 59     }
 60     d[u]=0;
 61     return f;
 62 }
 63 int Dinic(){
 64     int res=0;
 65     while(BFS())res+=DFS(S,0x3f3f3f3f);
 66     return res;
 67 }
 68 int id[120][120];
 69 int mp[120][120];
 70 int smm=0,dt=0;
 71 void solve(){
 72     int i,j;
 73     for(i=1;i<=n;i++)
 74         for(j=1;j<=m;j++)
 75             id[i][j]=++dt;
 76     S=0;T=dt+1;
 77     for(i=1;i<=n;i++)
 78         for(j=1;j<=m;j++){
 79             if((i+j)&1){
 80                 insert(S,id[i][j],mp[i][j]);
 81                 for(int k=1;k<=4;k++){
 82                     int nx=i+mx[k],ny=j+my[k];
 83                     if(nx>0 && nx<=n && ny>0 && ny<=m)
 84                         insert(id[i][j],id[nx][ny],INF);
 85
 86                 }
 87             }
 88             else insert(id[i][j],T,mp[i][j]);
 89         }
 90     return;
 91 }
 92 int main(){
 93     int i,j;
 94     n=read();m=read();
 95     for(i=1;i<=n;i++)
 96         for(j=1;j<=m;j++){
 97             mp[i][j]=read();
 98             smm+=mp[i][j];
 99         }
100     solve();
101     int res=Dinic();
102 //  printf("Res:%d\n",res);
103     printf("%d\n",smm-res);
104     return 0;
105 }

转载于:https://www.cnblogs.com/SilverNebula/p/6629250.html

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王者之剑

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

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

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

  5. [BZOJ1324]Exca王者之剑(最小割)

    === === 这里放传送门 === === 题解 一开始写这个题的时候看到什么"可以任意选择起点"还"可以停一秒"还有什么"奇数秒偶数秒" ...

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

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

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

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

  8. [BZOJ]1324: Exca王者之剑

    题目大意:在一个N*M的网格之中,每个格子上都有一定价值的宝石,Amber可以任意选则一个起始点.并且Amber可以瞬间取走当前所在格子中的宝石,Amber每秒可以走一步,在偶数秒时他周围4格中的宝石 ...

  9. [颓废史]蒟蒻的刷题记录

    QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...

  10. Cocos2d-html5《王者之剑》实现 (1)

    前面,< 手把手,快速搭建 Cocos2d-HTML5 开发调试环境> 与 < 如何自定义 Cocos2d-HTML5 Loading 界面> 两篇文章,帮助了我们搭建了其开发 ...

最新文章

  1. 机器学习常用损失函数小结
  2. JDK1.5 新特性
  3. RabbitMQ 一二事 - 简单队列使用
  4. Tomcat绿色版启动startup.bat一闪问题的解决方法!
  5. php cms 插件开发,phpcms编辑器插件最新版——ckeditor4.5
  6. OPPO尝鲜android版本更新,安卓11迎来四大贴心升级,OPPO小米率先尝鲜
  7. 关于switch-case问题
  8. 【C语言】时间操作,把1970年开始秒数计算的时间,转换为字符串格式输出
  9. vue计算多列和_解决vue 表格table列求和的问题
  10. java拖动图片拼图_求教,我的这个拼图程序中的移动图片的改怎么做
  11. sh mysql config_解决python安装mysqlclient出现“/bin/sh:1:mysql_config:not found”错误...
  12. 抖音神器---python实现图片转字符
  13. 用计算机计算根号2^2-1÷,2根号2(万能计算器在线使用)
  14. 127.0.0.1 zxt.php_php单文件版在线代码编辑器使用方法
  15. alios下载_AliOS Studio
  16. intelx86为何从0xFFFF0处执行
  17. 从零开始搭建自己的网站一:整体步骤
  18. 行人重识别(ReID) ——技术实现及应用场景
  19. gedit文本编辑器的设置
  20. WireShark找不到360wifi如何解决

热门文章

  1. UVa232.Crossword Answers
  2. C# 判断字符中是否包含中文
  3. 英文写作的25个黄金加分句型
  4. Visual Studio(Year)编辑器调试在IIS发布的Web程序出现错误的解决
  5. python学习-(__new__方法和单例模式)
  6. 介绍下Javascript原型和原型链的特点?
  7. cf. Lengthening Sticks 组合数学
  8. C#中数据库备份还原
  9. 基于R语言绘制BBC风格图表
  10. MySQL的约束、事务、字符串、日期、数学相关及其他补充