[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 ...
随机推荐
- cmake 使用
1.cmake 显示编译命令: 在顶层CMakeLists.txt里设置 set(CMAKE_VERBOSE_MAKEFILE ON) 或者 cmake . 再 m ...
- C# 多种方式连接Oracle。
废话不多说直接正题: 首先我们先在Oracle数据库下建了一个用户叫做lisi,密码为lisi,在这个用户下建立一张表叫做“USERS”,在这个表下新增三个数据. 方式一:利用OleDb连接Oracl ...
- HTTP基础知识2
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...
- lr
Action(){ //获取响应结果 web_reg_save_param("system_code", "LB=system_code\":\"&q ...
- 关系操作符 == != equals()
== 和!= //: object/test.java package object; import java.util.*; public class Test{ public static vo ...
- MFC单文档
一.创建并运行MFC单文档程序 1.创建单文档程序 这里使用的是VS2017.首先,打开VS2017,选择文件->新建->项目,然后选择Visual C++ -> MFC /ATL& ...
- Java String str = new String(value)和String str = value区别
示例代码: public class StringDemo2 { public static void main(String[] args) { String s1 = new String(&qu ...
- 使用Struts,实现简单的登录
一.新建项目Struts 1.右键 new————Web Project 2.点击项目——右键——myeclipse——add Struts Capabilities.....——选择struts2. ...
- java远程工具类
package com.zdz.httpclient; import java.io.BufferedReader; import java.io.IOException; import java.i ...
- thinkphp错误提示:系统发生错误
下载最新版本3.1.3,定义了一个应用,进入应用的config.php,在里面添加数据库类链接信息,在控制器里面M()一个表,访问控制器方法提示:系统发生错误.如果使用连接字符串DSN方式,调用M() ...