loj2062 [HAOI2016]地图
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int n, m, q, a[100005], uu, vv, hea[100005], cnt, dfn[100005], loo[100005];
int idx, dui[100005], qwq[100005], siz[100005], ans[100005], blc1, blc2;
int bei[100005], jis[1000005], qaq[2][1005], ovo[100005];
struct Edge{
int too, nxt, val;
}edge[300005];
struct Node{
int ll, rr, id, ty, li;
}nd[100005];
void add_edge(int fro, int too){
edge[++cnt].nxt = hea[fro];
edge[cnt].too = too;
hea[fro] = cnt;
}
bool cmp(Node x, Node y){
if(bei[x.ll]!=bei[y.ll]) return bei[x.ll]<bei[y.ll];
if(bei[x.ll]&1) return x.rr<y.rr;
else return x.rr>y.rr;
}
void dfs1(int x, int f){
dfn[x] = loo[x] = ++idx;
dui[idx] = x;
for(int i=hea[x]; i; i=edge[i].nxt){
int t=edge[i].too;
if(t==f) continue;
if(!dfn[t]){
dfs1(t, x);
loo[x] = min(loo[x], loo[t]);
}
else loo[x] = min(loo[x], dfn[t]);
}
}
void dfs2(int x){
qwq[x] = ++idx;
siz[x] = 1;
for(int i=hea[x]; i; i=edge[i].nxt){
int t=edge[i].too;
if(!qwq[t] && loo[t]>=dfn[x]){
dfs2(t);
siz[x] += siz[t];
}
}
for(int i=hea[x]; i; i=edge[i].nxt){
int t=edge[i].too;
if(!qwq[t] && loo[t]<dfn[x]){
dfs2(t);
siz[dui[loo[t]]] += siz[t];
}
}
}
void add(int x){
int p=(x-1)/blc2+1;
if(jis[x]&1) qaq[1][p]--, qaq[0][p]++;
else if(jis[x]) qaq[0][p]--, qaq[1][p]++;
else qaq[1][p]++;
jis[x]++;
}
void dec(int x){
int p=(x-1)/blc2+1;
if(jis[x]==1) qaq[1][p]--;
else if(jis[x]&1) qaq[1][p]--, qaq[0][p]++;
else qaq[0][p]--, qaq[1][p]++;
jis[x]--;
}
int main(){
cin>>n>>m;
blc1 = sqrt(n);
blc2 = sqrt(1000000);
for(int i=1; i<=n; i++){
scanf("%d", &a[i]);
bei[i] = (i - 1) / blc1 + 1;
}
for(int i=1; i<=m; i++){
scanf("%d %d", &uu, &vv);
add_edge(uu, vv);
add_edge(vv, uu);
}
dfs1(1, 0);
idx = 0;
dfs2(1);
cin>>q;
for(int i=1; i<=q; i++){
scanf("%d %d %d", &nd[i].ty, &uu, &nd[i].li);
nd[i].ll = qwq[uu]; nd[i].rr = qwq[uu] + siz[uu] - 1;
nd[i].id = i;
}
sort(nd+1, nd+1+q, cmp);
for(int i=1; i<=n; i++)
ovo[qwq[i]] = a[i];
int l=nd[1].ll, r=l-1;
for(int i=1; i<=q; i++){
while(l>nd[i].ll) add(ovo[--l]);
while(l<nd[i].ll) dec(ovo[l++]);
while(r<nd[i].rr) add(ovo[++r]);
while(r>nd[i].rr) dec(ovo[r--]);
int now=0, p=(nd[i].li-1)/blc2+1;
for(int j=1; j<p; j++)
now += qaq[nd[i].ty][j];
for(int j=blc2*(p-1)+1; j<=nd[i].li; j++)
if(jis[j] && (jis[j]&1)==nd[i].ty)
now++;
ans[nd[i].id] = now;
}
for(int i=1; i<=q; i++)
printf("%d\n", ans[i]);
return 0;
}
loj2062 [HAOI2016]地图的更多相关文章
- P3180 [HAOI2016]地图
P3180 [HAOI2016]地图 显然,这是一个仙人掌图 inline void tarjan(LL u,LL fa){ low[u]=dfn[u]=++tot, pre[tot]=u; for( ...
- luogu P3180 [HAOI2016]地图 仙人掌 线段树合并 圆方树
LINK:地图 考虑如果是一棵树怎么做 权值可以离散 那么可以直接利用dsu on tree+树状数组解决. 当然 也可以使用莫队 不过前缀和比较难以维护 外面套个树状数组又带了个log 套分块然后就 ...
- 2018.10.29 bzoj4564: [Haoi2016]地图(仙人掌+莫队)
传送门 根据原图建一棵新的树. 把原图每一个环上除了深度最浅的点以外的点全部向深度最浅的点连边. 然后可以搞出来一个dfsdfsdfs. 这个时候我们就成功把问题转换成了对子树的询问. 然后就可以对权 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 【LOJ】#2062. 「HAOI2016」地图
题解 我对莫队真是一无所知 这个东西显然可以用圆方树转成一个dfs序列 然后呢,用莫队计算每个询问区间的每个数出现的次数,从而顺带计算每个数字的奇偶性 但是我们要查的数字也用一个范围,可以直接用分块维 ...
- HAOI2016 简要题解
「HAOI2016」食物链 题意 现在给你 \(n\) 个物种和 \(m\) 条能量流动关系,求其中的食物链条数. \(1 \leq n \leq 100000, 0 \leq m \leq 2000 ...
- Java 征途:行者的地图
前段时间应因缘梳理了下自己的 Java 知识体系, 成文一篇望能帮到即将走进或正在 Java 世界跋涉的程序员们. 第一张,基础图 大约在 2003 年我开始知道 Java 的(当时还在用 Delph ...
- 【详细教程】论android studio中如何申请百度地图新版Key中SHA1值
一.写在前面 现在越来越多的API接口要求都要求提供我们的项目SHA1值,开发版目前还要求不高,但是发布版是必定要求的.而目前定位在各大APP中也较为常见,当下主流的百度地图和高德地图都在申请的时候会 ...
- C# 程序中嵌入百度地图
本例是对WinForm中使用百度地图的简要介绍.百度地图目前支持Android开发,IOS开发,Web开发,服务接口,具体可以参照'百度地图开放平台'. [动态加载百度地图]涉及到的知识点: WebB ...
随机推荐
- 2013 QConf上海软件开发大会总结
带着工作中的一些疑问,我参加了在上海举办的QConf 全球软件开发大会.会议以主题的形式按分会场召开,我主要选择知名网站案例分析.大数据处理技术.高效能团队建设和金融系统架构与设计四个主题内容.三天会 ...
- DB错误代码大全
db2错误代码大全 sqlcode sqlstate 说明000 00000 SQL语句成功完成01xxx SQL语句成功完成,但是有警告+012 01545 未限定的列名被解释为一个有相互关系的引 ...
- MAC MAMP install yaf
Yaf doesn't support PHP 5.6! You may see this: Warning: PHP Startup: yaf: Unable to initialize modul ...
- Yii2 Working with Relational Data at ActiveDataProvider
Yii2 Working with Relational Data at ActiveDataProvider namespace common\models; use Yii; use yii\ba ...
- Sql Server配置管理器与 Sql Server Management Studio
起初只安装了Sql Server配置管理器,之后用Navicat连接,总是报错(命名管道提供程序: 无法打开与 SQL Server 的连接 [53]) (另记:Navicat的“主机名或IP地址:” ...
- 感知器及其Python实现
感知器是由美国计算机科学家罗森布拉特(F.Roseblatt)于1957年提出的.感知器可谓是最早的人工神经网络.单层感知器是一个具有一层神经元.采用阈值激活函数的前向网络.通过对网络权值的训练,可以 ...
- @TransactionConfiguration过时与替代写法
在使用了Spring的项目中做单元测试时,以前的标准写法是这样的: 但是在高版本的Spring框架中(Spring4.2以后),@TransactionConfiguration已经标注为过时的注解, ...
- Vscdoe技巧1
vscdoe常用快捷键 主命令框 F1 或 Ctrl+Shift+P: 打开命令面板.在打开的输入框内,可以输入任何命令,例如: 按一下 Backspace 会进入到 Ctrl+P 模式 在 Ctrl ...
- mysql 基础,列类型
- 八、MySQL 数据类型
MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 数值类型 MySQL支持所有标准S ...