[Astar2008]Black-Whilte-Tree
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的更多相关文章
- [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法
二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...
- SAP CRM 树视图(TREE VIEW)
树视图可以用于表示数据的层次. 例如:SAP CRM中的组织结构数据可以表示为树视图. 在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view) ...
- 无限分级和tree结构数据增删改【提供Demo下载】
无限分级 很多时候我们不确定等级关系的层级,这个时候就需要用到无限分级了. 说到无限分级,又要扯到递归调用了.(据说频繁递归是很耗性能的),在此我们需要先设计好表机构,用来存储无限分级的数据.当然,以 ...
- 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...
- Leetcode 笔记 110 - Balanced Binary Tree
题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...
- Leetcode 笔记 100 - Same Tree
题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...
- Leetcode 笔记 99 - Recover Binary Search Tree
题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...
- Leetcode 笔记 98 - Validate Binary Search Tree
题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...
- Leetcode 笔记 101 - Symmetric Tree
题目链接:Symmetric Tree | LeetCode OJ Given a binary tree, check whether it is a mirror of itself (ie, s ...
- Tree树节点选中及取消和指定节点的隐藏
指定节点变色 指定节点隐藏 单击节点 未选中则选中该节点 已选中则取消该节点 前台: 1.HTML <ul id="listDept" name="listDept ...
随机推荐
- @RequestBody,@ResponseBody
@RequestBody 作用: i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上: ...
- android手机访问app网页报错:net::ERR_PROXY_CONNECTION_FAILED
手机访问网页报错:net::ERR_PROXY_CONNECTION_FAILED 手机访问app中嵌入的html网页报错: net::ERR_PROXY_CONNECTION_FAILED 原来是手 ...
- robotium之does not have a signature matching问题
今天发现个很low的问题,脚本都写好了,运行Robotium测试用例时报错如下: [2017-03-01 09:58:54 - baiduAppTest] Test run failed: Permi ...
- vue2之 missing param for named route "xxxx"
场景: 解决方法:可以做的是将其包含router-link在适当的位置v-if,以便在您的异步数据实际到达之前不会尝试渲染. html代码: <div id="app" cl ...
- 【转】js中的事件委托或是事件代理详解
起因: 1.这是前端面试的经典题型,要去找工作的小伙伴看看还是有帮助的: 2.其实我一直都没弄明白,写这个一是为了备忘,二是给其他的知其然不知其所以然的小伙伴们以参考: 概述: 那什么叫事件委托呢?它 ...
- django----对model查询扩展
基于对象关联查询 一对多查询(Book--Publish): 正向查询,按字段: (从关联的表中查询) book_obj.publish : 与这本书关联的出版社对象 book_obj.publish ...
- 步步为营-55-js练习
1:加法计算器 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head&g ...
- IO中File类基本使用
package chapter10; import java.io.File; public class TestFile01 { public static void main(String[] a ...
- poj 1961 (求字符串中的重复子串)
Sample Input 3aaa12aabaabaabaab0Sample Output Test case #12 23 3 Test case #22 2 //aa有2个a6 2 //aabaa ...
- canvas画多边形
<canvas id = "myCanvas" width = '500' height = '500'> Canvas画正多边形 </canvas>< ...