题目链接

评测姬好快啊(港记号?)暴力40pts变成60pts

因为题目说了保证蓝色点两两之间只有一条路径,所以肯定组成了一棵树,而对于每次询问的x1,y1,x2,y2的子矩阵中就存在着一个森林

不难知道对于一个森林,其中树(联通块)的数量为$V-E$(V为节点数,E为边数)

也就是说对于每一个询问,只要求出蓝色节点数减去边数的答案就好了

点数和边数都可以用二维前缀和求,其中边可以分横边和竖边分别记录

 #pragma GCC optimize("Ofast")
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int ans=,f=;char chr=getchar();
while(!isdigit(chr)){if(chr=='-')f=-;chr=getchar();}
while(isdigit(chr)) {ans=(ans<<)+(ans<<)+chr-;chr=getchar();}
return ans*f;
}const int M = ;
int n,m,Q,s[][],v[][],sx,sy,tx,ty,ans;
int dx[]={,,,-},
dy[]={,,-,};
char a[][];
void dfs(int x,int y){
v[x][y]=;
for(int i=;i<;i++){
int fx=x+dx[i],fy=y+dy[i];
if(v[fx][fy]||fx<sx||fx>tx||fy<sy||fy>ty||a[fx][fy]=='') continue;
dfs(fx,fy);
}
}
inline void BF(){
while(Q--){
memset(v,,sizeof(v));ans=;
sx=read(),sy=read(),tx=read(),ty=read();
for(int i=sx;i<=tx;i++)
for(int j=sy;j<=ty;j++)
if(!v[i][j]&&a[i][j]=='') ans++,dfs(i,j);
printf("%d\n",ans);
}
}int s1[M][M],s2[M][M],s3[M][M];
inline void Solve(){
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
a[i][j]=(a[i][j]=='');
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
s1[i][j]=a[i][j]+s1[i-][j]+s1[i][j-]-s1[i-][j-],
s2[i][j]=(a[i][j]&&a[i+][j])+s2[i-][j]+s2[i][j-]-s2[i-][j-],
s3[i][j]=(a[i][j]&&a[i][j+])+s3[i-][j]+s3[i][j-]-s3[i-][j-];
while(Q--){
sx=read(),sy=read(),tx=read(),ty=read();
int V=s1[tx][ty]-s1[sx-][ty]-s1[tx][sy-]+s1[sx-][sy-];
int E=s2[tx-][ty]-s2[tx-][sy-]-s2[sx-][ty]+s2[sx-][sy-]
+s3[tx][ty-]-s3[sx-][ty-]-s3[tx][sy-]+s3[sx-][sy-];
printf("%d\n",V-E);
} }
int main(){
freopen("wang.in","r",stdin);
freopen("wang.out","w",stdout);
n=read(),m=read(),Q=read();
for(int i=;i<=n;i++)for(int j=;j<=m;j++)cin>>a[i][j];
// BF();
Solve();
return ;
}

[NOIP2019模拟赛][AT2381] 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. 「AT2381 [AGC015C] Nuske vs Phantom Thnook」

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

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

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

  5. AGC015 C Nuske vs Phantom Thnook(前缀和)

    题意 题目链接 给出一张$n \times m$的网格,其中$1$为蓝点,$2$为白点. $Q$次询问,每次询问一个子矩阵内蓝点形成的联通块的数量 保证任意联通块内的任意蓝点之间均只有一条路径可达 S ...

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

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

  7. [agc015c]nuske vs phantom thnook

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

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

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

  9. test20190827 NOIP2019 模拟赛

    100+100+50=250.最后那道期望题需要用另外的方式统计. 精灵加护 ljss 被 M 个敌人打倒在地上啦!每个敌人有一个威力值 bi.但是他手中还拥有 N 把武器!每把武器有一个威力值 ai ...

随机推荐

  1. NX二次开发-UFUN拉伸函数UF_MODL_create_extruded2

    NX9+VS2012 //NX二次开发中常用拉伸函数为UF_MODL_create_extruded2,但是此函数不能拉伸片体, //想要拉伸片体用函数UF_MODL_create_extruded. ...

  2. nlp总结

    中科院nlpir和海量分词(http://www.hylanda.com/)是收费的. hanlp:推荐基于CRF的模型的实现~~要看语料,很多常用词会被分错,所以需要词库支撑.目前最友好的开源工具包 ...

  3. 2、http请求与http响应

    我们在接口测试过程中,可能会用http协议,webservice协议,当然用的较多的还是http协议,webservice协议在此不做过多介绍,我们先了解一下http协议,然后重点介绍http请求与响 ...

  4. PAT_A1020#Tree Traversals

    Source: PAT A1020 Tree Traversals (25 分) Description: Suppose that all the keys in a binary tree are ...

  5. 神经网络中使用Batch Normalization 解决梯度问题

    BN本质上解决的是反向传播过程中的梯度问题. 详细点说,反向传播时经过该层的梯度是要乘以该层的参数的,即前向有: 那么反向传播时便有: 那么考虑从l层传到k层的情况,有: 上面这个 便是问题所在.因为 ...

  6. C#面向对象通信

    面向对象通信编程: 看起来像是调用本地的函数,就得到了结果: 实际上参数是传递到了远程机器上了,而函数也是在远程机器上运行的.

  7. 2015年7个重要的Web设计趋势

    Web设计趋势每一年都会有所变化.但设计师的创意天赋是推动改变网页设计标准的法则.如果在2015年,网页缺少以下7个设计元素,必定被淘汰~ 1.排版更灵活 这部分的主要焦点在于,字体展现会受到新兴排版 ...

  8. 【Java】Appache Flume 中文介绍

     Flume 是什么        Apache Flume是一个高可靠.高可用的分布式的海量日志收集.聚合.传输系统.它能够从不同的日志源採集数据并集中存储. Flume也算是Hadoop生态系 ...

  9. 21-4indexOf

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. java oop第06章_异常处理

    一. 异常的概念: 若程序都按我们事先设定的计划运行为正常执行,但通常会出现我们事先预料之外的其他情况,称为程序发生异常, 在java中会对一些可能出现异常的代码进行分类,达到尽量对可能发生的异常进行 ...