【2019.8.12 慈溪模拟赛 T2】汪哥图(wang)(前缀和)
森林
考虑到题目中给出条件两点间至多只有一条路径。
就可以发现,这是一个森林。
而森林有一个很有用的性质。
考虑对于一棵树,点数-边数=\(1\)。
因此对于一个森林,点数-边数=连通块个数。
所以,我们只要前缀和求出询问区间内的点数和边数,就可以计算出连通块个数了。
注意边数要分两个方向讨论,然后询问时注意防止越界。
代码
#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define N 2000
using namespace std;
int n,m,Qt,a[N+5][N+5];
class FastIO
{
private:
#define FS 100000
#define tc() (A==B&&(B=(A=FI)+fread(FI,1,FS,stdin),A==B)?EOF:*A++)
#define pc(c) (C==E&&(clear(),0),*C++=c)
#define tn (x<<3)+(x<<1)
#define D isdigit(c=tc())
int T;char c,*A,*B,*C,*E,FI[FS],FO[FS],S[FS];
public:
I FastIO() {A=B=FI,C=FO,E=FO+FS;}
Tp I void read(Ty& x) {x=0;W(!D);W(x=tn+(c&15),D);}
Tp I void readD(Ty& x) {W(!D);x=c&15;}
Tp I void write(Ty x) {W(S[++T]=x%10+48,x/=10);W(T) pc(S[T--]);}
Tp I void writeln(Con Ty& x) {write(x),pc('\n');}
I void clear() {fwrite(FO,1,C-FO,stdout),C=FO;}
}F;
class SuffixSumSolver
{
private:
int d[N+5][N+5],e1[N+5][N+5],e2[N+5][N+5];
public:
I void Solve()
{
RI i,j,xx,yx,xy,yy,td,te1,te2;for(i=1;i<=n;++i) for(j=1;j<=m;++j)//预处理前缀和
d[i][j]=d[i-1][j]+d[i][j-1]-d[i-1][j-1]+a[i][j],//点数
e1[i][j]=e1[i-1][j]+e1[i][j-1]-e1[i-1][j-1]+(a[i][j]&a[i-1][j]),//向上的边
e2[i][j]=e2[i-1][j]+e2[i][j-1]-e2[i-1][j-1]+(a[i][j]&a[i][j-1]);//向左的边
W(Qt--) F.read(xx),F.read(yx),F.read(xy),F.read(yy),//处理询问
td=d[xy][yy]-d[xx-1][yy]-d[xy][yx-1]+d[xx-1][yx-1],//点数
te1=e1[xy][yy]-e1[xx][yy]-e1[xy][yx-1]+e1[xx][yx-1],//向上的边,最上面一行不能选
te2=e2[xy][yy]-e2[xx-1][yy]-e2[xy][yx]+e2[xx-1][yx],//向左的边,最左边一列不能选
F.writeln(td-te1-te2);//点数-边数=连通块个数
}
}S;
int main()
{
freopen("wang.in","r",stdin),freopen("wang.out","w",stdout);
RI i,j;F.read(n),F.read(m),F.read(Qt);
for(i=1;i<=n;++i) for(j=1;j<=m;++j) F.readD(a[i][j]);
return S.Solve(),F.clear(),0;
}
【2019.8.12 慈溪模拟赛 T2】汪哥图(wang)(前缀和)的更多相关文章
- 【2019.8.15 慈溪模拟赛 T2】组合数(binom)(卢卡斯定理+高维前缀和)
卢卡斯定理 题目中说到\(p\)是质数. 而此时要求组合数向质数取模的结果,就可以用卢卡斯定理: \[C_x^y=C_{x\ div\ p}^{y\ div\ p}\cdot C_{x\ mod\ p ...
- 【2019.8.6 慈溪模拟赛 T2】树上路径(tree)(Trie)
从暴力考虑转化题意 考虑最暴力的做法,我们枚举路径的两端,然后采用类似求树上路径长度的做法,计算两点到根的贡献,然后除去\(LCA\)到根的贡献两次. 即,设\(v_i\)为\(i\)到根路径上的边权 ...
- 【2019.8.7 慈溪模拟赛 T2】环上随机点(ran)(自然算法)
简单声明 我是蒟蒻不会推式子... 所以我用的是乱搞做法... 大自然的选择 这里我用的乱搞做法被闪指导赐名为"自然算法",对于这种输入信息很少的概率题一般都很适用. 比如此题,对 ...
- 【2019.8.8 慈溪模拟赛 T2】query(query)(分治+分类讨论)
分治 首先,我们考虑分治处理此问题. 每次处理区间\([l,r]\)时,我们先处理完\([l,mid]\)和\([mid+1,r]\)两个区间的答案,然后我们再考虑计算左区间与右区间之间的答案. 处理 ...
- 【2019.8.9 慈溪模拟赛 T2】摘Galo(b)(树上背包)
树上背包 这应该是一道树上背包裸题吧. 众所周知,树上背包的朴素\(DP\)是\(O(nm^2)\)的. 但对于这种体积全为\(1\)的树上背包,我们可以通过记\(Size\)优化转移时的循环上界,做 ...
- 【2019.8.12 慈溪模拟赛 T1】钥匙(key)(暴力DP)
暴力\(DP\) 这题做法很多,有\(O(n^2)\)的,有\(O(n^2logn)\)的,还有徐教练的\(O(nlogn)\)的,甚至还有\(bzt\)的二分+线段树优化建图的费用流. 我懒了点,反 ...
- 【2019.8.14 慈溪模拟赛 T2】黑心老板(gamble)(2-SAT)
\(2-SAT\) 考虑每个点只能选择\(R\)或\(B\),可以看作选\(0\)或\(1\). 然后对于给出的关系式,若其中一个位置满足关系式,另两个位置就必须不满足关系式,这样就可以对于每个关系式 ...
- 【2019.8.11下午 慈溪模拟赛 T2】数数(gcd)(分块+枚举因数)
莫比乌斯反演 考虑先推式子: \[\sum_{i=l}^r[gcd(a_i,G)=1]\] \[\sum_{i=l}^r\sum_{p|a_i,p|G}\mu(p)\] \[\sum_{p|G}\mu ...
- 【2019.8.11上午 慈溪模拟赛 T2】十七公斤重的文明(seventeen)(奇偶性讨论+动态规划)
题意转化 考虑我们对于集合中每一个\(i\),若\(i-2,i+k\)存在,就向其连边. 那么,一个合法的集合就需要满足,不会存在环. 这样问题转化到了图上,就变得具体了许多,也就更容易考虑.求解了. ...
随机推荐
- python进阶之垃圾回收
内存使用: 程序在运行的过程需要开辟内存空间,比如创建一个对象需要一片内存空间,定义变量需要内存空间.有内存的开辟,势必也要有内存的释放,不然只进不出那不是貔貅了吗?即使有开辟有释放在短期内还是会有垃 ...
- centos--该虚拟机似乎正在使用中。 如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权。否则,请按“取消(C)”按钮以防损坏。
centos非正常关机,导致无法正常启动的问题 该虚拟机似乎正在使用中. 如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权.否则,请按“取消(C)”按钮以防损坏. 解决方案: 1. 找 ...
- iOS: 线程中那些常见的锁
一.介绍 在多线程开发中,锁的使用基本必不可少,主要是为了解决资源共享时出现争夺而导致数据不一致的问题,也就是线程安全问题.锁的种类很多,在实际开发中,需要根据情况选择性的选取使用,毕竟使用锁也是消耗 ...
- SQLite安装及使用教程
SQLite是一款轻型的嵌入式关系数据库,轻量级,效率高,操作起来也特别方便 我们今天来讲解一下SQLite的安装和一些基本操作 SQLite下载 如果是64位机,下载下面的两个解压就好 在dos界面 ...
- Saiku使用iframe嵌入页面访问地址配置化(二十八)--DWR的基本使用
Saiku使用iframe嵌入页面使用时ip与端口配置化(二十八)--DWR的基本使用 DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开 ...
- Long类型数据前端精度丢失
问题描述 后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况.例如:201511200001725439这样一个Long类型的整数,传给前端后会变成201511200001725440 相 ...
- WEB引入Google思源黑体
通过Link标签在网页头部引用Google Web Font: 1 <link rel="stylesheet" href="https://fonts.googl ...
- java获取下一天的日期
我们来看看Java怎么获取下一天的日期: 哈哈哈,开玩笑啦,这个只是个段子. "哪怕悲伤有1000种,快乐有1种就够了."
- c# Winform 加载窗体
先来一个加载窗体代码 public partial class FrmLoading : Form { public BackgroundWorker updateDBWorker=new Backg ...
- Socket,Tcp,Http的关联
下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置: TCP/IP 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议 ...