AtCoder - 2568 Lotus Leaves】的更多相关文章

Problem Statement There is a pond with a rectangular shape. The pond is divided into a grid with H rows and W columns of squares. We will denote the square at the i-th row from the top and j-th column from the left by (i, j). Some of the squares in t…
题目传送门:https://arc074.contest.atcoder.jp/tasks/arc074_d 题目大意: 给定一个\(H×W\)的网格图,o是可以踩踏的点,.是不可踩踏的点. 现有一人在S处,向T移动,若此人现在在\((i,j)\)上,那么下一步他可以移动到​\((i,k)\)或\((k,j)\)上,\(k\)任意 问最少需要将多少个o改成.,可以使这个人无法从S到达T,输出最少需要更改的数目:如果无论如何都不能使这个人无法从S到T,则输出\(-1\) 这个模型就是最小割啊--我…
$n \leq 300,m \leq 300$,$n*m$的格子里有起点有终点有空地有障碍,人会从起点选一个同行或同列空地跳过去,然后一直这样跳到终点.求至少删掉多少格子使得人跳不到终点. 首先S和T同行或同列无解. 这不是裸的最小割嘛..等会这复杂度不大对 优化:一行里的点要连来连去嘛,每个点都要向同行或同列的所有点连inf边嘛,那咱把这边聚一下,每行每列新开一个点,这一行的所有点连向代表这一行的点,代表这一行的点连向所有这一行的点,这样边从三次方变成了平方.可过. 还有一种建图方法:每行每列…
题意 给定一个n*m的池塘,每个格子上可能有叶子. 从一个叶子出发,可以跳到相同行或相同列的叶子. 问至少去掉多少叶子,使得起点不能到达终点. \(n,m<=100\) 解法 很显然的最小割模型. 每列每行都新建一个点. 每片叶子拆成两个点,一个向另一个连一条容量为1的边. 另外一个就要向本行本列新建的那个点连一条容量无穷的边. 然后新建的那个点给所有本行或本列的叶子的第一个点连一条容量无穷的边. 然后跑一遍最小割就行了.…
There is a pond with a rectangular shape. The pond is divided into a grid with H rows and W columns of squares. We will denote the square at the i-th row from the top and j-th column from the left by (i, j). Some of the squares in the pond contains a…
Description 给你一个n*m网格图,有起点荷叶和终点荷叶,有中转荷叶,其他的格子没东西,一个荷叶可以跳到同一行或者列的另一个荷叶.问最多删掉几个中转荷叶能让起点终点不连通.如果不行输出-1. Input ​ 第一行是两个正整数R,CR,C ​ 接下来是一个R∗CR∗C的字符矩阵,第ii行第jj个字符为ai,jai,j ​ 若ai,j==′.′ai,j==′.′,那么这个格子是水面 ​ 若ai,j==′o′ai,j==′o′,那么这个格子是一片荷叶 ​ 若ai,j==′S′ai,j==′…
题目链接 题目大意 一个n*m的网格上有一些点,一个点可以跳到与其同一行或同一列的点上.给定起点和终点. 求要使起点不能跳到终点,最少撤走几个点. \(n,m\leq 100\) 解题思路 考虑将能够互相到达的点之间连边,题目要求即使删去尽可能少的点使图不连通. 十分套路地把一个点拆成一个入点和出点,之间连一条流量为1的边,删去这个点即使割去这条边. 然后就是网络流板子了. 代码 #include<iostream> #include<cstdio> #include<cst…
C - Chocolate Bar 题面 There is a bar of chocolate with a height of H blocks and a width of W blocks. Snuke is dividing this bar into exactly three pieces. He can only cut the bar along borders of blocks, and the shape of each piece must be a rectangle…
构造题都是神仙题 /kk ARC066C Addition and Subtraction Hard 首先要发现两个性质: 加号右边不会有括号:显然,有括号也可以被删去,答案不变. \(op_i\)和\(A_{i+1}\)之间只会有一个括号:有多个括号的话只保留最外边那个,答案不变. 然后就可以定义状态:\(dp_{i,j}\)表示前\(i\)个数,还有\(j\)个未闭合的左括号,得到的最大答案. 由于只有减号右边有括号,所以只要知道左边有几个未闭合的左括号,就可以知道自己的贡献是\(1\)还是…
ARC 074 C - Chocolate Bar 直接枚举第一刀横切竖切,然后另一块要求如果横切分成\(H / 2\)竖切分成\(W/2\)即可 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define space putchar(' ') #define enter…