传送门

题意:一棵树,询问子树中权值大于k的节点个数,修改点权值,插入新点,断开边;强制在线


该死该死该死!!!!!!

MD我想早睡觉你知不知道

该死该死沙比提

断开边只会影响一个块,重构这个块就行了

如果断开的点$u$是这个块$p$的根,只修改原图和块图就好了

否则,把$u$子树在块中的部分从$p$里删除,放到一个新块里。并且,这些点连到的其他块的点,也要在块图上与$p$断开与新块相连

所以我们维护一个删除边的$mark$标记

WA:一开始原图加的是双向边,通过判断$fa$防止出错..后来$fa$会变化,然后判断$fa$就失灵了应该会一直$dfs$停不下来

所以一开始$dfs$就给双向边不用的那一条打上$mark$标记就好了

ps:

1.读入挂我直接复制了PoPoQQQ大爷的因为我有一次以为是读入导致WA

2.vector好快用这道题代码交上一题比我上一题跑的都快

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
using namespace std;
typedef long long ll;
const int N=2e5+;
inline int read1(){
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;
}
namespace IOStream{
const int L=<<;
char buffer[L];
char *S,*T;
char Get_Char()
{
if(S==T)
{
T=(S=buffer)+fread(buffer,,L,stdin);
if(S==T)
return EOF;
}
return *S++;
}
int Get_Int()
{
int re=;
char c;
do c=Get_Char(); while(c<''||c>'');
while(c>=''&&c<='')
re=(re<<)+(re<<)+(c-''),c=Get_Char();
return re;
}
}
#define read IOStream::Get_Int int n,Q,a[N],op,u,x; struct meow{
vector<int> a;
inline void set() {sort(a.begin(), a.end());}
inline int count(int v) {return a.size() - (upper_bound(a.begin(), a.end(), v) - a.begin());}
inline void push(int v) {a.push_back(v);}
inline void insert(int v) {a.insert(lower_bound(a.begin(), a.end(), v), v);}
inline void erase(int v) {a.erase(lower_bound(a.begin(), a.end(), v));}
inline void replace(int x,int v) {if(x==v) return; erase(x); insert(v);}
inline int size() {return a.size();}
}b[N];
int m, pos[N], block; struct Graph4Block{
struct edge{int v,ne;} e[N<<];
int cnt, h[N], ine[N], mark[N<<];
inline void ins(int u,int v) {
e[++cnt]=(edge){v,h[u]}; h[u]=cnt;
ine[v]=cnt;
}
inline void dele(int u) {mark[ine[u]]=;}
int dfs(int u,int k) {
int ans= b[u].count(k);
for(int i=h[u];i;i=e[i].ne) if(!mark[i]) ans+=dfs(e[i].v, k);
return ans;
}
}G; struct edge{int v,ne;} e[N<<];
int cnt, h[N];
inline void ins(int u,int v) {
e[++cnt]=(edge){v,h[u]}; h[u]=cnt;
e[++cnt]=(edge){u,h[v]}; h[v]=cnt;
}
int fa[N], mark[N<<], ine[N];
inline void ins1(int u,int v) {
e[++cnt]=(edge){v,h[u]}; h[u]=cnt;
ine[v]=cnt; fa[v]=u;
}
inline void dele(int u) {fa[u]=; mark[ine[u]]=;} void dfs(int u) {
int p=pos[u];
b[p].push(a[u]);
for(int i=h[u];i;i=e[i].ne) if(!mark[i]) {
if(e[i].v!=fa[u]) {
fa[e[i].v]=u; ine[e[i].v]=i;
if(b[p].size() < block) pos[e[i].v]=p;
else pos[e[i].v]=++m, G.ins(p, m);
dfs(e[i].v);
} else mark[i]=;
}
} struct Block{
int dfs(int u,int k) {
int ans= a[u]>k;
for(int i=h[u];i;i=e[i].ne) if(!mark[i])
if(e[i].v!=fa[u]) {
if(pos[e[i].v] == pos[u]) ans+= dfs(e[i].v, k);
else ans+= G.dfs(pos[e[i].v], k);
}
return ans;
}
int Que(int u, int k) {return dfs(u, k);} void Cha(int u, int d) {b[pos[u]].replace(a[u], d); a[u]=d;} void Ins(int u, int d) {
a[++n]=d; ins1(u, n);
int p=pos[u];
if(b[p].size() < block) pos[n]=p, b[p].insert(a[n]);
else pos[n]=++m, b[m].push(a[n]), G.ins(p, m);
} void dfsSpl(int u,int p) {
b[p].erase(a[u]); pos[u]=m; b[m].push(a[u]);
for(int i=h[u];i;i=e[i].ne) if(!mark[i])
if(e[i].v!=fa[u]) {
if(pos[e[i].v] == p) dfsSpl(e[i].v, p);
else G.dele(pos[e[i].v]), G.ins(m, pos[e[i].v]);
}
}
void Split(int u){
int p=pos[u];
if(pos[fa[u]] != p) G.dele(p);
else m++, dfsSpl(u, p), b[m].set();
dele(u);
}
}B;
int main() {
freopen("in", "r", stdin);
n=read();
for(int i=;i<n;i++) ins(read(), read() );
for(int i=;i<=n;i++) a[i]=read();
block= pow(n, 0.6);
pos[]=++m; dfs();
for(int i=;i<=m;i++) b[i].set(); Q=read(); int lastans=;
for(int i=;i<=Q;i++) {
op=read();
u=read()^lastans;
if(op==) B.Split(u);
else{
x=read()^lastans;
if(op==) lastans=B.Que(u, x), printf("%d\n",lastans);
else if(op==) B.Cha(u, x);
else B.Ins(u, x);
}
}
}

BZOJ 3731 3731: Gty的超级妹子树 [树上size分块 !]的更多相关文章

  1. BZOJ 3720: Gty的妹子树 [树上size分块]

    传送门 题意: 一棵树,询问子树中权值大于$k$的节点个数,修改点权值,插入新点:强制在线 一开始以为询问多少种不同的权值,那道CF的强制在线带修改版,直接吓哭 然后发现看错了这不一道树上分块水题.. ...

  2. [BZOJ 3731] Gty的超级妹子树 (树分块)

    [BZOJ 3731] Gty的超级妹子树 (树分块) 题面 给出一棵树(或森林),每个点都有一个值.现在有四种操作 1.查询x子树里>y的值有多少个 2.把点x的值改成y 3.添加一个新节点, ...

  3. bzoj Gty的超级妹子树 块状树

    Gty的超级妹子树 Time Limit: 7 Sec  Memory Limit: 32 MBSubmit: 500  Solved: 122[Submit][Status][Discuss] De ...

  4. bzoj3731: Gty的超级妹子树(树分块)

    传送门 分块树,代码参考了Manchery的 具体细节还是看代码好了 这题卡常……注意常数写好点…… //minamoto #include<iostream> #include<c ...

  5. [bzoj 3720] Gty的妹子树 (树上分块)

    树上分块(块状树) Description 我曾在弦歌之中听过你, 檀板声碎,半出折子戏. 舞榭歌台被风吹去, 岁月深处尚有余音一缕-- Gty神(xian)犇(chong)从来不缺妹子-- 他来到了 ...

  6. BZOJ 3731: Gty的超级妹子树

    3731: Gty的超级妹子树 Time Limit: 7 Sec  Memory Limit: 32 MBSubmit: 346  Solved: 96[Submit][Status][Discus ...

  7. BZOJ 3787: Gty的文艺妹子序列

    3787: Gty的文艺妹子序列 Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 186  Solved: 58[Submit][Status][Dis ...

  8. 【BZOJ3720】Gty的妹子树 块状树

    [BZOJ3720]Gty的妹子树 我曾在弦歌之中听过你,檀板声碎,半出折子戏.舞榭歌台被风吹去,岁月深处尚有余音一缕……Gty神(xian)犇(chong)从来不缺妹子……他来到了一棵妹子树下,发现 ...

  9. BZOJ.3653.谈笑风生(长链剖分/线段树合并/树状数组)

    BZOJ 洛谷 \(Description\) 给定一棵树,每次询问给定\(p,k\),求满足\(p,a\)都是\(b\)的祖先,且\(p,a\)距离不超过\(k\)的三元组\(p,a,b\)个数. ...

随机推荐

  1. Centos7环境搭建lnmp环境

    [原创]编译安装lnmp环境 准备软件:nginx1.10.3+php-5.5.12+mariadb10.0.8(数据库在此使用的yum安装) 如果需要编译安装的可以给我留言,我后续再发布出来! 依赖 ...

  2. mysql中配置ssl_key、ssl-cert、ssl-ca的路径及建立ssl连接

    1.创建 CA 私钥和 CA 证书 (1)下载并安装openssl,将bin目录配置到环境变量: (2)设置openssl.cfg路径(若不设置会报错,找不到openssl配置文件) \bin\ope ...

  3. sublimeserver启动本地服务器(sublime text)

    今天又get到了一个新知识点,就是在sublime text上也可以模拟一个本地服务器的环境,前提是要先安装sublimeserver这个插件.这个插件的安装办法有两种. 1.我们可以直接在subli ...

  4. Redis能干啥?细看11种Web应用场景

    下面列出11种Web应用场景,在这些场景下可以充分的利用Redis的特性,大大提高效率. 1.在主页中显示最新的项目列表. Redis使用的是常驻内存的缓存,速度非常快.LPUSH用来插入一个内容ID ...

  5. 关于HTTP请求出现 405状态码 not allowed的解决办法

    最近学爬虫.发现httppost请求目标网站会出现405 状态码,原因为 Apache.IIS.Nginx等绝大多数web服务器,都不允许静态文件响应POST请求 所以将post请求改为get请求即可

  6. vue中使用Ueditor编辑器

    一.   下载包: 从Ueditor的官网下载1.4.3.3jsp版本的Ueditor编辑器,官网地址为: http://ueditor.baidu.com/website/ 下载解压后会得到如果下文 ...

  7. html dl dt dd标签元素语法结构与使用

    dl dt dd认识及dl dt dd使用方法 标签用于定义列表类型标签. dl dt dd目录 dl dt dd介绍 结构语法 dl dt dd案例 dl dt dd总结 一.dl dt dd认识 ...

  8. PHPMailer发送邮件失败:SMTP connect failed

    标签: PHPMailersmtp邮件服务器邮件发送失败 2015-05-22 19:29 1755人阅读 评论(0) 收藏 举报 分类: Apache php+mysql(2) 版权声明:本文为博主 ...

  9. 你知道织梦后台安装插件时为什么会出现这个Character postion 686, 'item'&n

    https://zhidao.baidu.com/question/589525064.html?qbl=relate_question_3&word=Tag Character postio ...

  10. 《并行程序设计导论》——MPI(Microsoft MPI)(6):并行排序算法

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...