题意

题目链接

给出一张$n \times m$的网格,其中$1$为蓝点,$2$为白点。

$Q$次询问,每次询问一个子矩阵内蓝点形成的联通块的数量

保证任意联通块内的任意蓝点之间均只有一条路径可达

Sol

mdzz不好好读题目还想做题,。。

题目中说“联通块内的任意点都只有一条路径可达”,不难推断出这是一棵树

因此 联通块个数 = 蓝点的数量 - 蓝点间边的数量

考虑用前缀和维护,点的数量好处理,但是这个边的数量有点麻烦

反正我用一个数组是搞不出来,因为无法判断左右的方向。。

那就行列分别记录一下就可以了。

#include<cstdio>
#include<iostream>
#include<cstring>
#define LL long long
using namespace std;
const int MAXN = ;
inline int read() {
char c = getchar(); int x = , f = ;
while(c < '' || c > '') {if(c == '-') f = -; c = getchar();}
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * f;
}
int N, M, Q;
char s[MAXN][MAXN];
int P[MAXN][MAXN], R[MAXN][MAXN], L[MAXN][MAXN];
int GetP(int x, int y) {
if(x == || y == ) return ;
return P[x - ][y] + P[x][y - ] - P[x - ][y - ];
}
int GetR(int x, int y) {
if(x == || y == ) return ;
return R[x - ][y] + R[x][y - ] - R[x - ][y - ];
}
int GetL(int x, int y) {
if(x == || y == ) return ;
return L[x - ][y] + L[x][y - ] - L[x - ][y - ];
}
main() {
N = read(); M = read(); Q = read();
for(int i = ; i <= N; i++) {
scanf("%s", s[i] + );
for(int j = ; j <= M; j++) {
P[i][j] = GetP(i, j);
R[i][j] = GetR(i, j);
L[i][j] = GetL(i, j);
if(s[i][j] == '') L[i][j] += (s[i - ][j] == ''),
R[i][j] += (s[i][j - ] == ''),
P[i][j]++;
}
}
/*for(int i = 1; i <= N; i++, puts(""))
for(int j = 1; j <= M; j++)
printf("%d ", L[i][j]);*/
while(Q--) {
int x1 = read(), y1 = read(), x2 = read(), y2 = read();
// printf("%d %d %d %d\n", GetP(x2, y2), GetP(x1 - 1, y2), GetP(x2, y1 - 1), GetP(x1 - 1, y1 - 1));
int ans1 = P[x2][y2] - P[x1 - ][y2] - P[x2][y1 - ] + P[x1 - ][y1 - ];
int ans2 = R[x2][y2] - R[x1 - ][y2] - R[x2][y1] + R[x1 - ][y1];
int ans3 = L[x2][y2] - L[x2][y1 - ] - L[x1][y2] + L[x1][y1 - ];
cout << ans1 - ans2 - ans3 << endl;
}
return ;
}
/*
*/

AGC015 C Nuske vs Phantom Thnook(前缀和)的更多相关文章

  1. AtCoder:C - Nuske vs Phantom Thnook

    C - Nuske vs Phantom Thnook https://agc015.contest.atcoder.jp/tasks/agc015_c 题意: n*m的网格,每个格子可能是蓝色, 可 ...

  2. Nuske vs Phantom Thnook

    Nuske vs Phantom Thnook Time limit : 4sec / Memory limit : 256MB Score : 700 points Problem Statemen ...

  3. AGC 015C.Nuske vs Phantom Thnook(思路 前缀和)

    题目链接 闻本题有格子,且何谓格子也 \(Description\) 给定\(n*m\)的蓝白矩阵,保证蓝格子形成的的同一连通块内,某蓝格子到达另一个蓝格子的路径唯一. \(Q\)次询问.每次询问一个 ...

  4. AtCoder Grand Contest 015 C - Nuske vs Phantom Thnook

    题目传送门:https://agc015.contest.atcoder.jp/tasks/agc015_c 题目大意: 现有一个\(N×M\)的矩阵\(S\),若\(S_{i,j}=1\),则该处为 ...

  5. [agc015c]nuske vs phantom thnook

    题意: 有一个n*m的网格图,每个格子是蓝色或白色.四相邻的两个格子连一条边,保证蓝格子构成一个森林. 有q组询问,每次询问给出一个矩形,问矩形内蓝格子组成的联通块个数. $1\leq n,m\leq ...

  6. Atcoder C - Nuske vs Phantom Thnook(递推+思维)

    题目链接:http://agc015.contest.atcoder.jp/tasks/agc015_c 题意:给一个n*m的格,蓝色的组成路径保证不成环,q个询问,计算指定矩形区域内蓝色连通块的个数 ...

  7. C - Nuske vs Phantom Thnook

    题意:n*m矩阵,n,m<=2e3,矩阵中的1能走到相邻4个1上,0代表障碍,若两个1联通 则只有一条路径 q个询问,q<=2e5,每次询问一个子矩阵中有多少个连通分量? 同一个连通分量中 ...

  8. [NOIP2019模拟赛][AT2381] Nuske vs Phantom Thnook

    题目链接 评测姬好快啊(港记号?)暴力40pts变成60pts 因为题目说了保证蓝色点两两之间只有一条路径,所以肯定组成了一棵树,而对于每次询问的x1,y1,x2,y2的子矩阵中就存在着一个森林 不难 ...

  9. 「AT2381 [AGC015C] Nuske vs Phantom Thnook」

    题目大意 给出一个01矩阵,这个矩阵有一个特殊的性质: 对于任意两个 \(1\) 之间最多只有 \(1\) 条由 \(1\) 构成的路径.每次询问给出一个矩形范围,查询在这个范围内的联通快个数. 分析 ...

随机推荐

  1. Ubuntu下crontab命令的用法

    cron是一个Linux下的后台进程,用来定期的执行一些任务.因为我用的是Ubuntu,所以这篇文章中的所有命令也只能保证在Ubuntu下有效,但其他系统应该也差不多. 想要让cron执行你指定的任务 ...

  2. hadoop集群监控工具Apache Ambari安装配置教程

    ambari 1.2.4 下载地址:http://www.apache.org/dist/incubator/ambari/ambari-1.2.4/ambari-1.2.4-incubating.t ...

  3. solr搜索应用

    非票商品搜索,为了不模糊查询影响数据库的性能,搭建了solr搜索应用,php从solr读取数据

  4. 6.1 安装Ubuntu

    声明:sunny从来没有接触过linux.今天是第一次接触linux,日后每天都会接触linux了.坚持,每日练习,相信毕业后的我,一定会从小白成为linux大神. 安装Ubuntu之前,请先参考该博 ...

  5. NIO和Reactor

    本文参考Doug Lea的Scalable IO in Java. 网络服务 随着网络服务的越来越多,我们对网络服务的性能有了更高的要求,提供一个高性能,稳定的web服务是一件很麻烦的事情,所以有了n ...

  6. eos各表的关系

    在使用EOS WorkFlow的过程中,无论是开发者在“开发环境”中定义业务流程,还是“工作流引擎”控制流程流转,或是工作流参与者使用的“客户端”,再或者管理员使用的“管理与监控工具”,在这期间都会贯 ...

  7. KOL运营之——如何与网文作者高效地约稿?

    本文来自网易云社区,转载务必请注明出处. 随着网络文学的发展,影响力逐渐扩大,越来越多的同事在工作中遇到需要和这些作者打交道的时候.对于作者这个群体,很多时候都是只闻其书,不见其人.要跟这样的群体打交 ...

  8. [WPF自定义控件]从ContentControl开始入门自定义控件

    1. 前言 我去年写过一个在UWP自定义控件的系列博客,大部分的经验都可以用在WPF中(只有一点小区别).这篇文章的目的是快速入门自定义控件的开发,所以尽量精简了篇幅,更深入的概念在以后介绍各控件的文 ...

  9. 【leetcode 3. 无重复字符的最长子串】解题报告

    思路:滑动窗口的思想 方法一:滑动窗口 int lengthOfLongestSubstring(string s) { /* 控制一个滑动窗口,窗口内的字符都是不重复的,通过set可以做到判断字符是 ...

  10. 使用js页面添加或删除标签

    // 添加var container = document.getElementById('divAudio');container.appendChild(audio); // 删除var cont ...