#include<cstdio>
#include<queue>
using namespace std; const int N = 210 , M = 210000 , INF = 2147483647; int a[N + 5][N + 5] , b[N + 5][N + 5] , n , m , s , t , ans;
char str[N + 5];
int dep[N * N + 5] , cur[N * N + 5] , h[N * N + 5] , tot = 1; struct edge{
int to , nxt , v;
}e[M + 5]; int fx[4][2] = {-1 , 0 , 0 , -1 , 1 , 0 , 0 , 1}; inline void add(int x , int y , int v)
{
e[++tot].to = y;
e[tot].nxt = h[x];
e[tot].v = v;
h[x] = tot;
}
inline void Add(int x , int y , int v) {add(x , y , v) , add(y , x , 0);}
inline int id(int x , int y) {return (x - 1) * m + y;}
inline int calc(char ch)
{
if(ch >= '0' && ch <= '9')
return ch - '0';
if(ch >= 'a' && ch <= 'z')
return ch - 'a' + 10;
if(ch >= 'A' && ch <= 'Z')
return ch - 'A' + 36;
}
inline bool pd(int x , int y)
{
if (x <= 0 || y <= 0 || x > n || y > m) return false;
return true;
} inline int bfs(int s , int t)
{
for(register int i = s; i <= t; i++) dep[i] = 0 , cur[i] = h[i];
queue<int> Q;
dep[s] = 1;
Q.push(s);
while (!Q.empty())
{
int now = Q.front();
Q.pop();
for(register int i = h[now]; i; i = e[i].nxt)
{
int v = e[i].to;
if (e[i].v == 0 || dep[v] != 0) continue;
dep[v] = dep[now] + 1;
Q.push(v);
}
}
return dep[t];
} inline int dfs(int x , int fa , int mi)
{
if (x == t || mi <= 0) return mi;
int flow = 0;
for(register int i = cur[x]; i; i = e[i].nxt)
{
cur[x] = i;
int v = e[i].to;
if (v == fa || dep[x] + 1 != dep[v] || e[i].v == 0) continue;
int f = dfs(v , x , min(mi , e[i].v));
if (f <= 0) continue;
mi -= f , e[i].v -= f , e[i ^ 1].v += f , flow += f;
if (mi <= 0) break;
}
return flow;
} inline int dinic(int s , int t)
{
int res = 0;
while (bfs(s , t)) res += dfs(s , 0 , INF);
return res;
} inline void build()
{
for(register int i = 1; i <= n; i++)
for(register int j = 1; j <= m; j++)
{
int x = id(i , j);
if ((i + j) & 1)
{
Add(3 * x , 3 * x + 1 , b[i][j]);
Add(3 * x + 1 , 3 * x + 2 , a[i][j]);
Add(3 * x + 2 , t , INF);
}
else{
Add(s , 3 * x , INF);
Add(3 * x , 3 * x + 1 , a[i][j]);
Add(3 * x + 1 , 3 * x + 2 , b[i][j]);
for(register int k = 0; k < 4; k++)
{
int xx = i + fx[k][0] , yy = j + fx[k][1];
if (!pd(xx , yy)) continue;
int y = id(xx , yy);
Add(3 * x + 1 , 3 * y , INF);
Add(3 * x + 2 , 3 * y + 1 , INF);
}
}
}
} int main()
{
// freopen("Revolution.in" , "r" , stdin);
scanf("%d%d" , &n , &m);
t = id(n , m) * 3 + 3;
for(register int i = 1; i <= n; i++)
{
scanf("%s" , str + 1);
for(register int j = 1; j <= m; j++)
a[i][j] = calc(str[j]);
}
for(register int i = 1; i <= n; i++)
{
scanf("%s" , str + 1);
for(register int j = 1; j <= m; j++)
b[i][j] = calc(str[j]) , ans += b[i][j];
}
build();
printf("%d" , ans - dinic(s , t));
}

【雅礼联考DAY02】Revolution的更多相关文章

  1. 【NOIP2016提高A组模拟8.17】(雅礼联考day1)总结

    考的还ok,暴力分很多,但有点意外的错误. 第一题找规律的题目,推了好久.100分 第二题dp,没想到. 第三题树状数组.比赛上打了个分段,准备拿60分,因为时间不够,没有对拍,其中有分段的20分莫名 ...

  2. 【NOIP2016提高A组模拟8.19】(雅礼联考day2)总结

    第一题又有gcd,又有xor,本来想直接弃疗,不过后来想到了个水法: 当两个相邻的数满足条件时,那么他们的倍数也可能满足条件.然后没打,只打了个暴力. 正解就是各种结论,各种定理搞搞. 第二题,想都不 ...

  3. 【NOIP2016提高A组模拟8.19】(雅礼联考day2)公约数

    题目 给定一个正整数,在[1,n]的范围内,求出有多少个无序数对(a,b)满足gcd(a,b)=a xor b. 分析 显然a=b是一定不满足, 我们设\(a>b\), 易得gcd(a,b)&l ...

  4. 【NOIP2016提高A组模拟8.19】(雅礼联考day2)树上路径

    题目 给出一棵树,求出最小的k,使得,且在树中存在路径p,使得k>=S且k<=E.(k为路径p上的边的权值和). 分析 点分治,设当前为x的,求在以x为根的子树中,经过x的路径(包括起点或 ...

  5. 【NOIP2016提高A组模拟8.17】(雅礼联考day1)Binary

    题目 分析 首先每个数对\(2^i\)取模.也就是把每个数的第i位以后删去. 把它们放进树状数组里面. 那么当查询操作, 答案就位于区间\([2^i-x,2^{i-1}-1-x]\)中,直接查询就可以 ...

  6. 【NOIP2016提高A组模拟8.17】(雅礼联考day1)Value

    题目 分析 易证,最优的答案一定是按\(w_i\)从小到大放. 我们考虑dp, 先将w从小到大排个序,再设\(f_{i,j}\)表示当前做到第i个物品,已选择了j个物品的最大值.转移就是\[f_{i, ...

  7. 【NOIP2016提高A组模拟8.17】(雅礼联考day1)Matrix

    题目 分析 假设,我们从\(F_{i,2}\)出发,那么对\(F_{n,n}\)的贡献就是\(某个系数乘以a^{n-i}b^{n-1}r_i\): 同理,如果从\(F_{2,i}\)出发,那么对\(F ...

  8. [JZOJ4759] 【雅礼联考GDOI2017模拟9.4】石子游戏

    题目 描述 题目大意 在一棵树上,每个节点都有些石子. 每次将mmm颗石子往上移,移到根节点就不能移了. 双方轮流操作,问先手声还是后手胜. 有三种操作: 1. 询问以某个节点为根的答案. 2. 改变 ...

  9. 雅礼集训1-9day爆零记

    雅礼集训1-9day爆零记 先膜一下虐爆我的JEFF巨佬 Day0 我也不知道我要去干嘛,就不想搞文化科 (文化太辣鸡了.jpg) 听李总说可以去看(羡慕)各路大佬谈笑风声,我就报一个名吧,没想到还真 ...

  10. NOIp2018集训test-10-6/test-10-7 (联考五day1/day2)

    昨天考完月考,明天初赛,dcoi2017级今天终于开始停课准备noip了,大概没有比本弱校停课更晚的学校了吧.本来就够菜了,怕是要凉透哦. DAY1 T1石头剪刀布 据说爆搜随便做,但是我觉得我的O( ...

随机推荐

  1. 解决linux vlc设置中文问题

    解决方法 sudo apt install vlc-l10n

  2. 通过启动脚本控制PHP-FPM开关

    vi /etc/init.d/php-fpm 复制粘贴以下内容: #! /bin/sh# Comments to support chkconfig on CentOS# chkconfig: 234 ...

  3. C++编程笔记(QT)

    目录 入门基础 模态对话框 消息提示框(messagebox) 文件和目录 字体选择框 输入对话框 进度条 工具栏 控件布局 Windows托盘案例 控件 button 下拉菜单按钮 `radioBu ...

  4. SpringBoot源码2——SpringBoot x Mybatis 原理解析(如何整合,事务如何交由spring管理,mybatis如何进行数据库操作)

    阅读本文需要spring源码知识,和springboot相关源码知识 对于springboot 整合mybatis,以及mybatis源码关系不密切的知识,本文将简单带过 系列文章目录和关于我 涉及到 ...

  5. 时间老去,Ruby不死,Ruby语言基础入门教程之Ruby3全平台开发环境搭建EP00

    如果说电子游戏是第九艺术,那么,编程技术则配得上第十艺术的雅称.艺术发展的普遍规律就是要给与人们对于艺术作品的更高层感受,而Matz的Ruby语言则正是这样一件艺术品. 无论是语法还是理念,都让Rub ...

  6. react项目中如何出现config文件夹

    答案:运行  npm run eject  即可出现config文件夹 原因: 在package.json中:只有三个依赖,分别是react,react-dom,react-scripts,依赖为什么 ...

  7. 【Java技术专题】「原理专题」深入分析Java中finalize方法的作用和底层原理

    finalize方法是什么 finalize方法是Object的protected方法,Object的子类们可以覆盖该方法以实现资源清理工作,GC在首次回收对象之前调用该方法. finalize方法与 ...

  8. 【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移Redis数据实战指南(离线同步数据)

    离线迁移 与在线迁移相比,离线迁移适宜于源实例与目标实例的网络无法连通的场景,或者源端实例部署在其他云厂商Redis服务中,无法实现在线迁移. 存在的问题 由于生产环境的各种原因,我们需要对现有服务器 ...

  9. CF803G Periodic RMQ Problem

    简要题意 你需要维护一个序列 \(a\),有 \(q\) 个操作,支持: 1 l r x 将 \([l,r]\) 赋值为 \(x\). 2 l r 询问 \([l,r]\) 的最小值. 为了加大难度, ...

  10. (12)go-micro微服务JWT跨域认证

    目录 一 JWT介绍 二 JWT优缺点 三 JWT使用 1. 导包和数据定义 2.生成JWT 3.解析JWT 4.完整代码 四 最后 一 JWT介绍 JWT 英文名是 Json Web Token , ...