AtCoder:C - Nuske vs Phantom Thnook】的更多相关文章

C - Nuske vs Phantom Thnook https://agc015.contest.atcoder.jp/tasks/agc015_c 题意: n*m的网格,每个格子可能是蓝色, 可能是白色,问一个子矩阵内,蓝色方格的联通块数. 输入的数据中,保证蓝色点之间只有一条路径(或者没有). 分析: 因为任意蓝点之间只有一条路径,如果在相邻的蓝点之间连一条边后,也就是整张图没有环,在一个森林内,求一个些点构成的树的数量. 结论:联通块数=总节点数-边数. 因为,没加入一条边,会减少一个…
Nuske vs Phantom Thnook Time limit : 4sec / Memory limit : 256MB Score : 700 points Problem Statement Nuske has a grid with N rows and M columns of squares. The rows are numbered 1 through N from top to bottom, and the columns are numbered 1 through …
题目传送门:https://agc015.contest.atcoder.jp/tasks/agc015_c 题目大意: 现有一个\(N×M\)的矩阵\(S\),若\(S_{i,j}=1\),则该处为蓝色,否则为白色.保证蓝色格子构成的联通块为树,即联通块内蓝格子相邻的边为\(cnt-1\),多次询问子矩阵内蓝色联通块个数 题目都保证是棵树了就是个SB题,二维前缀和,记录蓝块数目,相邻蓝块个数(行列分开记好写些),子矩阵内用蓝块个数减去相邻蓝块个数即为联通块个数 /*program from W…
题目链接:http://agc015.contest.atcoder.jp/tasks/agc015_c 题意:给一个n*m的格,蓝色的组成路径保证不成环,q个询问,计算指定矩形区域内蓝色连通块的个数 题解:由于只有两种颜色所以求蓝色连通块就简单多了,连通块要么直接dfs一遍显然会超时,主要是询问有20000个. 但是求连通块也可以用总的个数减去连通的边数(主要是只有一种类型的连通块),直接存边不好处理不妨存一下横着连通的边数和竖着连通的边数,这样 就好处理很多了. #include <iost…
题意: 有一个n*m的网格图,每个格子是蓝色或白色.四相邻的两个格子连一条边,保证蓝格子构成一个森林. 有q组询问,每次询问给出一个矩形,问矩形内蓝格子组成的联通块个数. $1\leq n,m\leq 2000$ $1\leq q\leq200000$ 题解: 结论:联通块数=点数-边数 二维前缀和乱搞,没了. 代码: #include<algorithm> #include<iostream> #include<cstring> #include<cstdio&…
题目链接 闻本题有格子,且何谓格子也 \(Description\) 给定\(n*m\)的蓝白矩阵,保证蓝格子形成的的同一连通块内,某蓝格子到达另一个蓝格子的路径唯一. \(Q\)次询问.每次询问一个子矩形内蓝格子组成的连通块数. \(Solution\) 不会形成环,即一个连通块是一棵树,即点数=边数+1. 那么对于一个子矩形,求它里面的蓝格子数n和蓝格子之间的边数m,n-m就是连通块数了. 横边竖边分开,都用前缀和维护. 如果有环,则边数>=点数就没法做了. //89ms 52864KB #…
题意 题目链接 给出一张$n \times m$的网格,其中$1$为蓝点,$2$为白点. $Q$次询问,每次询问一个子矩阵内蓝点形成的联通块的数量 保证任意联通块内的任意蓝点之间均只有一条路径可达 Sol mdzz不好好读题目还想做题,.. 题目中说“联通块内的任意点都只有一条路径可达”,不难推断出这是一棵树 因此 联通块个数 = 蓝点的数量 - 蓝点间边的数量 考虑用前缀和维护,点的数量好处理,但是这个边的数量有点麻烦 反正我用一个数组是搞不出来,因为无法判断左右的方向.. 那就行列分别记录一…
题意:n*m矩阵,n,m<=2e3,矩阵中的1能走到相邻4个1上,0代表障碍,若两个1联通 则只有一条路径 q个询问,q<=2e5,每次询问一个子矩阵中有多少个连通分量? 同一个连通分量中任意两点只有一条路径,于是对相邻的每个1连接一条边,每一个连通分量显然都为一颗树若子矩形有k个联通分量,因为每个联通分量都为树,则子矩形中点数-边数等于k 利用二维前缀和求出子矩形1的个数(点)和相邻1(边)个数即可 复杂度O(mn+q)…
题目链接 评测姬好快啊(港记号?)暴力40pts变成60pts 因为题目说了保证蓝色点两两之间只有一条路径,所以肯定组成了一棵树,而对于每次询问的x1,y1,x2,y2的子矩阵中就存在着一个森林 不难知道对于一个森林,其中树(联通块)的数量为$V-E$(V为节点数,E为边数) 也就是说对于每一个询问,只要求出蓝色节点数减去边数的答案就好了 点数和边数都可以用二维前缀和求,其中边可以分横边和竖边分别记录 #pragma GCC optimize("Ofast") #include<…
题目大意 给出一个01矩阵,这个矩阵有一个特殊的性质: 对于任意两个 \(1\) 之间最多只有 \(1\) 条由 \(1\) 构成的路径.每次询问给出一个矩形范围,查询在这个范围内的联通快个数. 分析 先从给出的性质出发,可以发现如果在所有相邻的 \(1\) 之间连上一条边(双向边)以后这个性质就转化成了在这若干个 \(1\) 所组成的图中不会出现环,在仔细思考一下,不会出现环,而且是双向边,这意味着什么?没错,这是一片森林(由很多树组成),对于每一颗树就是一个联通快了,可以发现这既然是树,那么…