#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 mint 安装显卡驱动失败解决

    前言 安装显卡驱动的基本流程就是,禁用 nouveau驱动,然后安装 nnvidia驱动,然后重启电脑.但是我重新启动, 使用NVIDIA X Server Settings查看一直显示空白,毫无疑问 ...

  2. 【Java EE】Day14 Servlet、HTTP、Request

    一.Servlet 二.HTTP 三.Request 四.登录案例

  3. 互联网最全cka真题解析-2022

    1.CKA真题解析kubectl自动补全及帮助信息1.配置kubectl自动补全apt install bash-completion source <(kubectl completion b ...

  4. MYSQL-INNODB索引构成详解

    作者:郑啟龙 摘要: 对于MYSQL的INNODB存储引擎的索引,大家是不陌生的,都能想到是 B+树结构,可以加速SQL查询.但对于B+树索引,它到底"长"得什么样子,它具体如何由 ...

  5. ffmpeg库安装及入门指南(Windows篇)- 2022年底钜献

    最近项目需要,使用了 ffmpeg 做摄像头视频采集和串流.这几天有点时间,打算把相关的一些知识记录分享一下. 在撰写本文时,我又在另外一台电脑上把 ffmpeg 重新安装了一遍,所以绝对真实靠谱!如 ...

  6. Spring 6 源码编译和高效阅读源码技巧分享

    一. 前言 Spring Boot 3 RELEASE版本于 2022年11月24日 正式发布,相信已经有不少同学开始准备新版本的学习了,不过目前还不建议在实际项目中做升级,毕竟还有很多框架和中间件没 ...

  7. C#从实习到搬砖

    日常唠唠 没事就聊聊我在c#上踩过的那些坑,和一些笔记 少点比较,多些谦虚 会者不难 原博:轩先生大冒险 2022.4.19 datagridview 修改表头 dataGridView1.Colum ...

  8. [OpenCV实战]10 使用Hu矩进行形状匹配

    目录 1 什么是图像矩? 2 如何计算图像矩 2.1 质心获取 2.2 中心矩 2.3 Hu矩 3 基于Hu矩实现形状匹配 3.1 Hu矩的计算 3.2 基于matchShapes函数计算两个图形之间 ...

  9. 《STL源码剖析》STL的双层配置器

    SGI STL第一级配置器: template<int inst> class __malloc_alloc_template{...}; 其中: 1.allocate()直接使用mall ...

  10. echarts系列-带图教你调整左右位置x轴样式网格虚线刻度居中双轴Y轴滚动上下移动文字旋转改分割线颜色部分字体改色折注混合,X轴的颜色,X轴字体颜色,调整柱子颜色,调整小图标图例的大小和位置,鼠标hover时候的样式,用纵向阴影

    上面先说注意事项 1.如果使用show hidden控制图表显示隐藏,某些切换效果很奇怪,比如饼图,会从左上角开始放大,很丑,这个时候我们可以设置其宽高来解决问题,给其设置宽高后,切换的奇怪效果即可消 ...