「LibreOJ Round #11」Misaka Network 与测试 (网络流跑二分图匹配)

description

研究者们想要测试 Misaka Network,于是他们把 Misaka Network 中的所有妹妹们召集到了一起。
现在妹妹们排成了 N行 M 列,有的位置没有人。现在研究者们给每一个个体的超能力进行了评定,一共有三个能力等级:Level 1 低能力者、Level 2 异能力者 和 Level 3 超能力者。研究者们每次测试可以选取一个子矩形内的所有个体,为了保证高效,他们不希望这个矩形内存在空的位置。并且,为了保证稳定,他们希望这个矩形内所有个体的能力等级的平均值恰好为 2 。同时,每个个体最多只能参加一次测试,因此,多次测试选取的矩形应当不相交。

研究者们想知道他们最多能进行多少次测试。

输入格式
第一行两个整数N、M
接下来 N行每行 M个字符,每个字符表示了队列中对应位置的个体。
1 表示 Level 1 低能力者,2 表示 Level 2 异能力者,3 表示 Level 3 超能力者,* 表示一个空的位置。

输出格式
一行一个整数,表示最多能够进行多少次测试。
样例 1
Input
2 3
31*
*13
Output
2

样例 2
Input
6 6
23311*
**13**
11*233
13*223
***133
331***
Output
9

样例 3
Input
2 50
21111121332233123311312211231333122233133212221212
21332123132223111331233121122331133311112121331311
Output
51

数据范围与提示
对于所有数据 1≤N×M≤10^5,队列中仅包含 1、2、3、* 四种字符。

solution

平均值为222,不难想到1,31,31,3必须是一对一对绑定的
而且222一定是单独成一个矩阵的(最优)
所以只考虑1,31,31,3凑成一对,明显的二分图匹配问题
将相邻的1,31,31,3连边,然后跑二分图最大匹配,匈牙利的n3n^3n3是受不了的
于是乎就请到了我们的老朋友——网络流跑二分图最大匹配

sss111连流量为111的边,相邻的1−31-313连流量为111的边,333ttt连流量为111的边
在这里插入图片描述

code

#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
#define maxn 100005
#define inf 1e9
struct node {int nxt, to, flow;
}edge[maxn << 2];
queue < int > q;
int n, m, cnt;
char str[2][maxn];
int head[maxn], cur[maxn], dep[maxn];void addedge( int u, int v, int w ) {edge[cnt].nxt = head[u];edge[cnt].to = v;edge[cnt].flow = w;head[u] = cnt ++;edge[cnt].nxt = head[v];edge[cnt].to = u;edge[cnt].flow = 0;head[v] = cnt ++;
}bool bfs( int s, int t ) {memcpy( cur, head, sizeof( head ) );memset( dep, 0, sizeof( dep ) );q.push( s ), dep[s] = 1;while( ! q.empty() ) {int u = q.front(); q.pop();for( int i = head[u];~ i;i = edge[i].nxt ) {int v = edge[i].to;if( ! dep[v] && edge[i].flow ) {dep[v] = dep[u] + 1;q.push( v );}}}return dep[t];
}int dfs( int u, int t, int cap ) {if( u == t || ! cap ) return cap;int flow = 0;for( int i = cur[u];~ i;i = edge[i].nxt ) {cur[u] = i;int v = edge[i].to;if( dep[v] == dep[u] + 1 ) {int w = dfs( v, t, min( cap, edge[i].flow ) );if( ! w ) continue;cap -= w;flow += w;edge[i].flow -= w;edge[i ^ 1].flow += w;if( ! cap ) break;}}return flow;
}int dinic( int s, int t ) {int ans = 0;while( bfs( s, t ) )ans += dfs( s, t, inf );return ans;
}int id( int i, int j ) {return ( i - 1 ) * m + j;
}int main() {memset( head, -1, sizeof( head ) );scanf( "%d %d", &n, &m );int s = 0, t = n * m + 1, tot = 0;for( int i = 1;i <= n;i ++ ) {int k = i & 1;scanf( "%s", str[k] + 1 );for( int j = 1;j <= m;j ++ ) {int pos = id( i, j );switch( str[k][j] ) {case '*' : { break; }case '1' : {addedge( s, pos, 1 );if( i != 1 && str[k ^ 1][j] == '3' )addedge( pos, pos - m, 1 );if( j != 1 && str[k][j - 1] == '3' )addedge( pos, pos - 1, 1 );if( j != m && str[k][j + 1] == '3' )addedge( pos, pos + 1, 1 );break;}case '2' : { tot ++; break; }case '3' : {addedge( pos, t, 1 );if( i != 1 && str[k ^ 1][j] == '1' )addedge( pos - m, pos, 1 );break;}}}}printf( "%d\n", tot + dinic( s, t ) );return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YbtOJ-相似子串【SA,RMQ,二分】

正题 题目大意 给出一个长度为nnn的字符串&#xff0c;两个串相似当且仅当可以通过每种字符置换使得它们相同。 qqq次询问这个字符串所有子串中和这个串中sl,rs_{l,r}sl,r​子串有多少个相似的。 1≤n≤105,1≤q≤51051\leq n\leq 10^5,1\leq q\leq 5\times 10^51≤n≤105,1≤…

程序员修仙之路--把用户访问记录优化到极致

点击上方蓝色字体&#xff0c;关注我们菜菜呀&#xff0c;前几天做的用户空间&#xff0c;用户反映有时候比较慢呀CEO,CTO,CFO于一身的CXO是吗&#xff1f;菜菜我把你拉进用户反馈群&#xff0c;你解决一下呀CEO,CTO,CFO于一身的CXO&#xff08;完了&#xff0c;以后没清净时候…

[国家集训队]航班安排 (最大费用最大流)

description 神犇航空有K架飞机&#xff0c;为了简化问题&#xff0c;我们认为每架飞机都是相同的。神犇航空的世界中有N个机场&#xff0c;以0…N-1编号&#xff0c;其中0号为基地机场&#xff0c;每天0时刻起飞机才可以从该机场起飞&#xff0c;并不晚于T时刻回到该机场。一…

新数据革命:开源图形化数据引擎Hawk5发布

Hawk是一款开源图形化的爬虫和数据清洗工具&#xff0c;GitHub Star超过2k&#xff0c;前几代版本介绍如下&#xff1a;Hawk3: 终于等到你: 图形化开源爬虫Hawk 3发布!Hawk2: 120项优化: 超级爬虫Hawk 2.0重磅发布&#xff01;Hawk1: 如何从互联网采集海量数据&#xff1f;租房…

[TJOI2018]智力竞赛 (匈牙利)

description 题目描述 小豆报名参加智力竞赛&#xff0c;他带上了 n个好朋友作为亲友团一块来参加比赛。 比赛规则如下&#xff1a;一共有 m道题目&#xff0c;每个人都有 1 次答题机会&#xff0c;每次答题为选择一道题目回答&#xff0c;在回答正确后&#xff0c;可以从这个…

ASP.NET Core如何在ActionFilterAttribute里做依赖注入

点击蓝字关注我在ASP.NET Core里&#xff0c;我们可以使用构造函数注入很方便地对Controller&#xff0c;ViewComponent等部件做依赖注入。但是如何给过滤器ActionFilterAttribute也用上构造函数注入呢&#xff1f;问题我的博客系统里有个用来删除订阅文件缓存的ActionFilter&a…

[八省联考2018]劈配 (匈牙利)

description 一年一度的综艺节目《中国新代码》又开始了。Zayid 从小就梦想成为一名程序员&#xff0c;他觉得这是一个展示自己的舞台&#xff0c;于是他毫不犹豫地报名了。 轻车熟路的 Zayid 顺利地通过了海选&#xff0c;接下来的环节是导师盲选&#xff0c;这一阶段的规则…

助力苏州、星火相传,广苏两地微软技术俱乐部交流纪实

2019年1月19日时值二十四节气“大寒”前夕&#xff0c;江南水乡冬日的寒气盖不住苏州.NET开发者的热情&#xff0c;就在这一天苏州微软技术俱乐部成立了并举办了第一场大型的线下交流活动。星火相传2018年12月8日广州.NET微软技术俱乐部举办了恢复以来的第一场大型线下技术交流…

微软技术专家为您解读深度学习

随着阿尔法狗、无人驾驶、智能翻译的横空出世&#xff0c;“人工智能”这个已经存在60多年的词语&#xff0c;仿佛一夜之间重新成为热词。同时被科技圈和企业界广泛提及的还有“机器学习”“深度学习”“神经网络”…… 但如此喧嚣热烈的气氛之下&#xff0c;大部分人对这一领域…

「LibreOJ NOI Round #2」不等关系 (dp+NTT分治)

description 戳我看题目哦 solution 有一道非常相似的题目 一棵树&#xff0c;每条边限制两个端点的大小关系&#xff08;限制 a[u]>a[v]a[u]>a[v]a[u]>a[v] 或 a[u]<a[v]a[u]<a[v]a[u]<a[v]&#xff09; 求有多少种符合要求的排列aaa满足整棵树的限制。n…

PCB 机器学习(ML.NET)初体验实现PCB加投率预测

使用ML.NET建立PCB加投率模型对单一蚀刻工序进行加投率预测, 此实例为最简单预测&#xff0c;要想实现全流程加投率预测挑战难度还是挺大的&#xff0c;可以查看另一种关于大数据在PCB行业应用---加投率计算基本原理:PCB 加投率计算实现基本原理--K最近邻算法&#xff08;KNN&a…

潘淳的苏州.NET俱乐部成立有感!附我的录音

引言&#xff1a;今天是1月21日&#xff0c;我&#xff08;潘淳&#xff09;的生日&#xff0c;两天前刚刚过了他&#xff08;苏俱&#xff09;的生日&#xff0c;微软技术俱乐部&#xff08;苏州&#xff09;在苏州微软正式成立。作为大会活动的策划者和活动发起者之一&#x…

十年 IT 老兵带你通过案例学架构,附C#代码

技术大会上的分享大多高大上&#xff0c;亿级流量、超大型研发团队&#xff0c;虽然值得借鉴&#xff0c;但由于应用场景与研发资源的差异&#xff0c;一般企业并不容易落地。其实&#xff0c;中小型研发团队在IT行业还是占大多数&#xff0c;他们在技术架构方面的问题较多&…

浅谈一致性Hash原理及应用

在讲一致性Hash之前我们先来讨论一个问题。问题&#xff1a;现在有亿级用户&#xff0c;每日产生千万级订单&#xff0c;如何将订单进行分片分表&#xff1f;小A&#xff1a;我们可以按照手机号的尾数进行分片&#xff0c;同一个尾数的手机号写入同一片/同一表中。大佬&#xf…

如何定义开发完成?(Definition of Done)

最近在拜读郑晔的10x程序员工作法&#xff0c;收益良多&#xff0c;文中提出一个概念叫DoD&#xff08;Definition of Done&#xff09;给我的感触颇深。这让我联想到实际工作过程中&#xff0c;经常遇到的扯皮、争吵等各种场景&#xff0c;其实就和这个DoD分不开。一、场景描述…

【正睿2021寒假省选第二轮集训 day 1】串 (后缀自动机+记忆化)

description 定义一个字符串的子串是这个字符串的某个连续区间的字符组成的串。比如&#xff0c;“djq"的子串是"d”,“j”,“q”,“dj”,“jq”,和"djq"。 定义F(a,b)为最长在字符串bb中至少出现一次的字符串a的子串&#xff0c;例如&#xff1a; F(“d…

欧拉筛法的应用

[数论]-----欧拉筛法的应用 文章目录1.求1~n之间的所有质数2.求1~n之间所有自然数的欧拉函数φ&#xff08;x&#xff09;3.求1~n之间的每个数的因子个数详细推导&#xff1a;代码&#xff1a;4.求1~n之间每个数的因数和详细的推导&#xff1a;代码&#xff1a;筛法求莫比乌斯函…

全新尝试|ComponentOne WinForm和.NET Core 3.0

在微软 Build 2018 开发者大会上&#xff0c;.NET 团队公布了 .NET Core 的下一个主要版本 .NET Core 3.0 的规划蓝图&#xff1a;.NET Core 3将开始支持 Windows 桌面应用程序&#xff0c;包括 Windows Form、Windows Presentation Framework&#xff08;WPF&#xff09;和UWP…

[bzoj3625][Codeforces Round #250]小朋友和二叉树 (生成函数)

description 我们的小朋友很喜欢计算机科学&#xff0c;而且尤其喜欢二叉树。 考虑一个含有n个互异正整数的序列c[1],c[2],…,c[n]。如果一棵带点权的有根二叉树满足其所有顶点的权值都在集合{c[1],c[2],…,c[n]}中&#xff0c;我们的小朋友就会将其称作神犇的。并且他认为&am…

H - Tunnel Warfare HDU - 1540

H - Tunnel Warfare HDU - 1540 题意&#xff1a; n个数顺序排列&#xff0c;左右数相连&#xff0c; 现在有三个操作&#xff1a; 1.摧毁一个位置上的数 2.回复上一次摧毁的数 3.查询包含该位置的最长连续区间长度 题解&#xff1a; 有两个方法&#xff0c;第一个是区间的…