太神了!!!!
这种方法看来不适合我这种蒟蒻!!
下午还是老老实实用分治把!!

#include <cstdio>
#include <iostream>
#include <algorithm>
#define INF 1000000000
using namespace std;
struct H
{int ans;int C2,C5;int L25,R25;int L5,R2;
}seg_num[1000000*4+1];
int init[1000000+1];
int n,m;
int tot,g[1000000+1],num[1000000+1],nnext[1000000+1];int pos[1000000+1];
bool is_black[1000000+1];
int v[1000000*3+1],cnt;void Add(int x,int y)
{tot++;nnext[tot]=g[x];g[x]=tot;num[tot]=y;
}void dfs (int x)
{v[++cnt]=-5;v[++cnt]=x;pos[x]=cnt;for(int i=g[x];i;i=nnext[i])if(!is_black[num[i]])is_black[num[i]]=true,dfs(num[i]);v[++cnt]=-2;
}
void Up(int now)
{int L=now*2,R=now*2+1;if(seg_num[L].C5>seg_num[R].C2){seg_num[now].C2=seg_num[L].C2;seg_num[now].C5=seg_num[L].C5-seg_num[R].C2+seg_num[R].C5;}else{seg_num[now].C2=seg_num[L].C2+seg_num[R].C2-seg_num[L].C5;seg_num[now].C5=seg_num[R].C5;}seg_num[now].ans=max(max(seg_num[L].ans,seg_num[R].ans),max(seg_num[L].R25+seg_num[R].L5,seg_num[R].L25+seg_num[L].R2));seg_num[now].L25=max(seg_num[L].L25,max(seg_num[L].C5+seg_num[L].C2+seg_num[R].L5,seg_num[L].C2-seg_num[L].C5+seg_num[R].L25));seg_num[now].R25=max(seg_num[R].R25,max(seg_num[L].R2+seg_num[R].C2+seg_num[R].C5,seg_num[L].R25+seg_num[R].C5-seg_num[R].C2));seg_num[now].L5=max(seg_num[L].L5,seg_num[R].L5+seg_num[L].C5-seg_num[L].C2);seg_num[now].R2=max(seg_num[R].R2,seg_num[L].R2+seg_num[R].C2-seg_num[R].C5);
}
void Build(int now,int L,int R)
{if(L==R){if(v[L]<0){seg_num[now].L25=seg_num[now].R25=seg_num[now].R2=seg_num[now].L5=-INF;if(v[L]==-2)seg_num[now].C2=1;elseseg_num[now].C5=1;}return ;}int mid=(L+R)/2;Build(now*2,L,mid);Build(now*2+1,mid+1,R);Up(now);
}
void Change(int now,int L,int R,int loc)
{if(L==R){if(is_black[v[L]]==1)seg_num[now]=(H){0,0,0,0,0,0,0};elseseg_num[now]=(H){0,0,0,-INF,-INF,-INF,-INF};return ;}int mid=(L+R)/2;if(loc<=mid)Change(now*2,L,mid,loc);elseChange(now*2+1,mid+1,R,loc);Up(now);
}
int main()
{cin>>n;for(int i=1;i<n;i++){int x,y;scanf("%d %d",&x,&y);Add(x,y);Add(y,x);}is_black[1]=true;dfs(1);n*=3;Build(1,1,n); cin>>m; char c;int x;int nn=n/3;while(m--){getchar();c=getchar();if(c=='G'){if(nn==0) printf("-1\n");else if(nn==1) printf("0\n");else printf("%d\n",seg_num[1].ans);}else{scanf("%d",&x);if(is_black[x]==true)nn--;else nn++;is_black[x]=!is_black[x];Change(1,1,n,pos[x]);}}return 0;
}

转载于:https://www.cnblogs.com/ofsxb/p/5138654.html

【BZOJ 1095】 [ZJOI2007]Hide 捉迷藏 括号序列相关推荐

  1. [BZOJ 1095] [ZJOI2007]Hide 捉迷藏——线段树+括号序列(强..)

    神做法-%dalao,写的超详细 konjac的博客. 如果觉得上面链接的代码不够优秀好看,欢迎回来看本蒟蒻代码- CODE WITH ANNOTATION 代码中−6-6−6表示左括号'[',用−9 ...

  2. bzoj 1095: [ZJOI2007]Hide 捉迷藏

    Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩 捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条 ...

  3. 【BZOJ 1095】 1095: [ZJOI2007]Hide 捉迷藏 (括号序列+线段树)

    1095: [ZJOI2007]Hide 捉迷藏 Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩 捉迷藏游 ...

  4. 1095: [ZJOI2007]Hide 捉迷藏

    发现动态树分治还是挺好玩的.......然而效率有点拙计 跑了14S多,差点以为要TLE,回头一看发现时限40S. 模板抄的PoPoQQQ大爷的,顺便看了下漆神的论文,各种吓Cry. 准备水下QTRE ...

  5. [ZJOI2007]Hide 捉迷藏

    [ZJOI2007]Hide 捉迷藏 小岛的博客 黄学长的博客 NOI08 冬令营论文 <数据结构的提炼与压缩> 这个问题竟然还能用线段树做,拿小本本记下来. 转载于:https://ww ...

  6. BZOJ1095 ZJOI2007 Hide 捉迷藏

    BZOJ1095 ZJOI2007 Hide 捉迷藏 动态树分治+堆 动态点分治 posted on 2016-06-25 11:35  wjyi 阅读( ...) 评论( ...) 编辑 收藏 转载 ...

  7. bzoj1095: [ZJOI2007]Hide 捉迷藏 线段树维护括号序列 点分治 链分治

    这题真是十分难写啊 不管是点分治还是括号序列都有一堆细节.. 点分治:时空复杂度$O(n\log^2n)$,常数巨大 主要就是3个堆的初始状态 C堆:每个节点一个,为子树中的点到它父亲的距离的堆. B ...

  8. 「BZOJ1095」[ZJOI2007] Hide 捉迷藏

    题目描述 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条双向走廊组成,这N-1条 ...

  9. [ZJOI2007]Hide 捉迷藏(数据结构)

    LCT QTree也行吧. 思路巧妙,速度颠覆人们对LCT的常识. 发现set.find找不到会返回end(),然后你就把他给删了,这会导致在之后的插入时爆炸. 边权下放点权,upd时要小心. 和其他 ...

最新文章

  1. Android 编译源码 注意事项
  2. python脚本——图片重命名、图片合成视频、faster-rcnn画P-R曲线
  3. 犟泥巴php集训营,想要开发自己的PHP框架需要那些知识储备?
  4. Spring mvc环境搭建
  5. eureka集群 ha_Eureka
  6. KL-divergence
  7. 【Linux】一步一步学Linux——echo命令(203)
  8. 统计所有带有null的特征
  9. 单片机小白学步系列(三) 偶遇51单片机
  10. oracle 命令日志输出,ORACLE常用命令日志
  11. Linux信号处理机制
  12. C语言bcd码减法过程,bcd码的减法运算规则举例.ppt
  13. linux安装mysql5.5.52,Linux系统上安装MySQL 5.5prm
  14. python做系统查人的往来的信息_L01-04:python查询员工信息表练习
  15. linux保存编辑信息,linux系统编辑神器 -vim用法大全
  16. 学考语言成绩c对高考有影响吗_广东2020学考招录办法来了,实现平行志愿,计划不低于年度总计划50%...
  17. python 装机配置_Python如何实现自动装机功能 Python实现自动装机功能代码实例
  18. 终止python程序的死循环_终的解释|终的意思|汉典“终”字的基本解释
  19. [LeetCode] 面试题 02.07. 链表相交
  20. 微信小程序云开发实现一个社区 Demo(补充)

热门文章

  1. 动手学深度学习Pytorch Task03
  2. PaddleOCR 文本检测训练+推理模型转换教程
  3. 基于Faster R-CNN的安全帽目标检测
  4. 情感极性分析:基于情感词典、k-NN、Bayes、最大熵、SVM的情感极性分析
  5. 让我们了解下什么是智能客服(问答)
  6. 浅谈搜狗下拉词框优化推广的优势有哪些
  7. 交流信号叠加直流偏置_高速数字电路设计通关五部曲(二):接口信号匹配与对接...
  8. telnet服务器响应慢,交换机s10508 telnet登录后上反应慢
  9. matlab gpu 编程 macOS,MATLAB GPU编程基础
  10. Android数据存储之SQLite数据库存储