Description:

你拥有一棵有 N 个结点白色的树——所有节点都是白色的。

接下来,你需要处理 C 条指令:

1.修改指令:改变一个给定结点的颜色(白变黑,黑变白);

2.查询指令:询问从结点 1 到一个给定结点的路径上第一个

黑色结点编号。

数据范围:

$N <= 1000000 , C <= 1000000 $

Solution:

对于每条重链开一个set维护深度最小的黑点及其编号,查询就往上跳,修改直接修改就行

#include<bits/stdc++.h>
using namespace std;
const int mxn=1e6+5;
struct ed {
int to,nxt;
}t[mxn<<1];
int n,m,tot,cnt,col[mxn],sz[mxn],hd[mxn],dep[mxn],f[mxn],top[mxn],rk[mxn],id[mxn],son[mxn];
set<pair<int ,int > > s[mxn]; inline void add(int u,int v) {
t[++cnt]=(ed){v,hd[u]},hd[u]=cnt;
} void dfs1(int u,int fa)
{
sz[u]=1; dep[u]=dep[fa]+1; f[u]=fa;
for(int i=hd[u];i;i=t[i].nxt) {
int v=t[i].to;
if(v==fa) continue ;
dfs1(v,u);
sz[u]+=sz[v];
if(sz[v]>sz[son[u]]) son[u]=v;
}
} void dfs2(int u,int tp)
{
top[u]=tp; id[tp]=++tot;
if(son[u])
dfs2(son[u],tp);
for(int i=hd[u];i;i=t[i].nxt) {
int v=t[i].to;
if(f[u]==v||v==son[u]) continue ;
dfs2(v,v);
}
} int main()
{
scanf("%d%d",&n,&m); int u,v;
for(int i=1;i<n;++i) {
scanf("%d%d",&u,&v);
add(u,v),add(v,u);
}
dfs1(1,0); dfs2(1,0);
int opt,x;
for(int i=1;i<=m;++i) {
scanf("%d%d",&opt,&x);
if(opt==0) {
if(!col[x]) col[x]=1,s[top[x]].insert(make_pair(dep[x],x));
else col[x]=0,s[top[x]].erase(make_pair(dep[x],x));
}
else {
pair<int ,int > ans;
while(x) {
if(s[top[x]].begin()!=s[top[x]].end())
if((*s[top[x]].begin()).first<=dep[x]) //此处稍有细节
ans=make_pair((*s[top[x]].begin()).first,(*s[top[x]].begin()).second);
x=f[top[x]];
}
if(ans.second==0) puts("-1");
else printf("%d\n",ans.second);
}
} return 0;
}

[Astar2008]Black-Whilte-Tree的更多相关文章

  1. [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法

    二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...

  2. SAP CRM 树视图(TREE VIEW)

    树视图可以用于表示数据的层次. 例如:SAP CRM中的组织结构数据可以表示为树视图. 在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view) ...

  3. 无限分级和tree结构数据增删改【提供Demo下载】

    无限分级 很多时候我们不确定等级关系的层级,这个时候就需要用到无限分级了. 说到无限分级,又要扯到递归调用了.(据说频繁递归是很耗性能的),在此我们需要先设计好表机构,用来存储无限分级的数据.当然,以 ...

  4. 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...

  5. Leetcode 笔记 110 - Balanced Binary Tree

    题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...

  6. Leetcode 笔记 100 - Same Tree

    题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...

  7. Leetcode 笔记 99 - Recover Binary Search Tree

    题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...

  8. Leetcode 笔记 98 - Validate Binary Search Tree

    题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...

  9. Leetcode 笔记 101 - Symmetric Tree

    题目链接:Symmetric Tree | LeetCode OJ Given a binary tree, check whether it is a mirror of itself (ie, s ...

  10. Tree树节点选中及取消和指定节点的隐藏

    指定节点变色 指定节点隐藏 单击节点 未选中则选中该节点 已选中则取消该节点 前台: 1.HTML <ul id="listDept" name="listDept ...

随机推荐

  1. 字符串cookies转字典 scrapy使用。

    配置文件 DOWNLOADER_MIDDLEWARES = { 'weibo.middlewares.CookiesMiddleware': 543, } 中间件内容 class CookiesMid ...

  2. ES系列十四、ES聚合分析(聚合分析简介、指标聚合、桶聚合)

    一.聚合分析简介 1. ES聚合分析是什么? 聚合分析是数据库中重要的功能特性,完成对一个查询的数据集中数据的聚合计算,如:找出某字段(或计算表达式的结果)的最大值.最小值,计算和.平均值等.ES作为 ...

  3. was监控脚本编写时的注意点

    server = AdminConfig.getid('/Cell:myCell012/Node:myNode12/Server:server1/') 不可缺少斜杠,不然会报错 如果没法登录管理控制台 ...

  4. 【实践】Matlab2016a的mdce集群搭建

    Matlab R2016a的mdce集群搭建 1.解压文件Matlab_R2016b_win64.iso. 文件下载地址:链接:https://pan.baidu.com/s/1mjJOaHa 密码: ...

  5. http响应头设置

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletExcep ...

  6. UNIX网络编程读书笔记:I/O模型(阻塞、非阻塞、I/O复用、信号驱动、异步)

    I/O模型 UNIX下可用的5种I/O模型: (1)阻塞I/O (2)非阻塞I/O (3)I/O复用(select和poll) (4)信号驱动I/O(SIGIO) (5)异步I/O 对于一个套接口上的 ...

  7. 关于报错stale element reference: element is not attached to the page document处理

    1.现象 在执行脚本时,有时候引用一些元素对象会抛出如下异常 org.openqa.selenium.StaleElementReferenceException: stale element ref ...

  8. python装饰器@用法

    这个是我见过比较好的讲解链接: [廖雪峰的官方网站 - 装饰器]

  9. notepad++ 快捷键大全、notepad常用快捷键

    Notepad++ 快捷键 大全, notepad++也情有独钟,最近发现了一个快捷键,就是选中单词,ctrl+shift+enter.不过现在想知道一个快捷键,假设有三行代码,选中后一般按TAB就可 ...

  10. LeetCode(5):最长回文子串

    Medium! 题目描述: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 长度最长为1000. 示例: 输入: "babad" 输出: "bab&quo ...