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 ...
随机推荐
- 50道CSS基础面试题(附答案)
1 介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的? 标准盒子模型:宽度=内容的宽度(content)+ border + padding + margin低版本IE盒子模型:宽度 ...
- 【Shell脚本学习23】Shell函数参数
在Shell中,调用函数时可以向其传递参数.在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数... 带参数的函数示例: #!/bin/bash funWit ...
- OSS基本概念介绍
存储空间(Bucket): 存储空间是用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间. 可以设置和修改存储空间属性用来控制地域.访问权限.生命周期等,这些属性设置直接作用于该存 ...
- nginx配置文件语法高亮
下载文件 nginx.vim https://vim.sourceforge.io/scripts/script.php?script_id=1886 安装 下载 nginx.vim 文件到 ~/.v ...
- World Wind Java开发之六——解析shape文件(转)
http://blog.csdn.net/giser_whu/article/details/41647117 最近一直忙于导师项目的事情了,几天没更新了,昨天和今天研究了下WWJ解析shp文件的源代 ...
- UVA 10375 Choose and divide(大数的表示)
紫上给得比较奇怪,其实没有必要用唯一分解定理.我觉得这道题用唯一分解只是为了表示大数. 但是分解得到的幂,累乘的时候如果顺序很奇怪也可能溢出.其实直接边乘边除就好了.因为答案保证不会溢出, 设定一个精 ...
- NOIP2018赛前停课集训记(10.24~11.08)
前言 为了不久之后的\(NOIP2018\),我们的停课从今天(\(Oct\ 24th\))起正式开始了. 本来说要下周开始的,没想到竟提早了几天,真是一个惊喜.毕竟明天有语文考试.后天有科学考试,逃 ...
- C# WinForm 绘制圆角窗体
public void SetWindowRegion() { System.Drawing.Drawing2D.GraphicsPath FormPath; FormPath = new Syste ...
- C# 常用函数和方法集汇总
1.DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 1.1 取当前年月日时分秒 currentTime=System.D ...
- 【解题报告】AtCoder ABC115 (附英文题目)
------------------------------迟到的AK---------------------------------- A - Christmas Eve Eve Eve Time ...