「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≤…

CF1313D:Happy New Year(状压dp)

解析 比较妙的一道题 首先的一个技巧是把一条线段拆成左和右两个端点 顺便也就有了离散化 利用k的关键限制&#xff0c;压缩每个点覆盖线段的状态 需要动态更新每一位所对应的线段是哪条 代码 #include<bits/stdc.h> using namespace std; #define ll long long cons…

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

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

Codeforces Round #713 (Div. 3)

Codeforces Round #713 (Div. 3) 题号题目考点ASpy Detected!签到题BAlmost Rectangle模拟题CA-B Palindrome构造DCorrupted Array构造EPermutation by Sum构造FEducation模拟暴力GShort Task筛法求因数和文章目录A题意&#xff1a;题解&#xff1a;代码&#xff1a;B题意&…

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

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

CF809D-Hitchhiking in the Baltic States【FhqTreap】

正题 题目链接:https://www.luogu.com.cn/problem/CF809D 正题 题目链接:https://www.luogu.com.cn/problem/CF809D 题目大意 有一个长度为nnn的序列aaa&#xff0c;要求ai∈[li,ri]a_i\in[l_i,r_i]ai​∈[li​,ri​]&#xff0c;要求使得aaa的最长严格上升子序列最长。 1≤…

Divide by Zero 2021 and Codeforces Round #714 (Div. 2)

Divide by Zero 2021 and Codeforces Round #714 (Div. 2) 题号题目知识点AArray and PeaksBAND SequencesCAdd OneDGCD and MSTECost EquilibriumFSwapping Problem

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

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

11.6模拟:总结

250pts 1003010020 好的地方是没有挂分吧 T4还用假复杂度过了20 但是T2其实是可做的 关键就是对模型的转化 换个角度考虑每条边的贡献 思路就豁然开朗了 T4确实是神仙题 不太可做 qwq 加油吧OvO

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

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

P6944-[ICPC2018 WF]Gem Island【数学期望,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P6944 题目大意 有nnn颗不同颜色的宝石&#xff0c;每次随机选择一颗复制&#xff0c;重复ddd次&#xff0c;求最后宝石数前rrr的颜色的宝石数之和的期望值。 1≤r≤n,d≤3001\leq r\leq n,d\leq 3001≤r≤n,d≤300 解题思路…

Educational Codeforces Round 107 (Rated for Div. 2)

Educational Codeforces Round 107 (Rated for Div. 2) 题号题目知识点AReview Site签到BGCD Length思维构造CYet Another Card Deck思维DMin Cost String构造题EColorings and Dominoes思维题&#xff0c;构造题FChainwordGChips on a Board A 题意&#xff1a; 有3种评论员…

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

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

NOIP2012:疫情控制(二分、贪心、树上倍增)

解析 二分的单调性较为明显&#xff0c;一路推导下去的性质都不算太难想&#xff0c;正解的思路还是不难想到的 但从头到尾都实现很考验思维的严密性和代码能力 然后我就双重被考验挂了qwq 第一交的时候一个地方把倍增的dis数组写成pl&#xff0c;判断封口也有问题… 但竟然有…

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

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

Codeforces Round #715 (Div. 2)

Codeforces Round #715 (Div. 2) 题号题目知识点AAverage HeightBTMT DocumentCThe Sports Festival区间dpDBinary Literature构造题EAlmost SortedFComplete the MST A 题意&#xff1a; 如果两个相邻的数的和是偶数&#xff0c;则贡献为1 如何排序使得贡献值最大 题解&am…

YbtOJ-森林之和【dp】

正题 题目大意 一个节点的权值定义为它度数的平方&#xff0c;求所有nnn个点的有标号森林的所有节点权值和。 1≤n,T≤51031\leq n,T\leq 5\times 10^31≤n,T≤5103 解题思路 首先因为所有节点本质相同&#xff0c;所以我们可以只考虑一个节点所有情况下的权值和。 然后考虑…

CF1322B:Present(异或、two pointers)

解析 想到了按位&#xff0c;但卡在了进位… qwq 当时总是想一位一位往后转化&#xff0c;但是那样确实做不了 判断第k位时把每个数的前k-1位提出来 sort一下 再维护双指针&#xff0c;就可以很方便的统计进位的个数了 代码 #include<bits/stdc.h> using namespace st…

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

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

[CTSC2017]吉夫特(思维+巧妙)

description 戳我看题目 solution 显然只要选出来的子序列有一个组合数为偶数&#xff0c;最后取模 222 的结果都会是零 有一个结论&#xff1a;当且仅当n&mm时&#xff0c;CnmC_n^mCnm​为奇数 所以我们要选的子序列&#xff0c;任意相邻两位中后一位的下标和前一位的…