Description

给定一棵树,边的颜色为黑或白,初始时全部为白色。维护两个操作:
1.查询u到根路径上的第一条黑色边的标号。
2.将u到v    路径上的所有边的颜色设为黑色。
Notice:这棵树的根节点为1

Input

第一行两个数n,m分别表示点数和操作数。
接下来n-?    1行,每行2个数u,v.表示一条u到v的边。
接下来m行,每行为以下格式:
1 v 表示第一个操作
2 v u 表示第二种操作

Output

对于每个询问,输出相应答案。如果不存在,输出0。

由于边只会由白变黑,所以总的边修改次数为O(n),用并查集维护每个点到根的路径上最深的白边位置,预处理出边的染色顺序

逆序处理操作,用并查集维护,一开始把所有点合并到到根路径上第一条黑边,每取消一次染色就把边的下侧节点合并到上侧

#include<cstdio>
const int N=,R=;
char buf[R+],*ptr=buf-;
inline int _int(){
int x=,c=*++ptr;
while(c<)c=*++ptr;
while(c>)x=x*+c-,c=*++ptr;
return x;
}
int stk[],stp=;
inline void int_(int x){
if(!x)stk[++stp]=;
while(x)stk[++stp]=x%,x/=;
while(stp)putchar(stk[stp--]+);
putchar();
}
int n,m;
bool ed[N];
int f[N],q[N],ql,qr,dep[N],fa[N],id[N],aid[N];
int et[N*],enx[N*],e0[N],eid[N*],ep=;
int qs[N*],qw[N*],qp=,as[N],ap=;
inline int get(int x){
int a=x,c;
while(x!=f[x])x=f[x];
while(x!=(c=f[a]))f[a]=x,a=c;
return x;
}
int main(){
fread(buf,,R,stdin);
n=_int();m=_int();
for(int i=;i<=n;i++)f[i]=i;
for(int i=;i<n;i++){
int a=_int(),b=_int();
et[ep]=b;enx[ep]=e0[a];eid[ep]=i;e0[a]=ep++;
et[ep]=a;enx[ep]=e0[b];eid[ep]=i;e0[b]=ep++;
}
ql=qr=;
q[qr++]=;
dep[]=;
while(ql!=qr){
int w=q[ql++];
for(int i=e0[w];i;i=enx[i])if(int u=et[i]){
et[i^]=;
fa[u]=w;
id[u]=eid[i];
dep[q[qr++]=u]=dep[w]+;
}
}
for(int i=;i<m;i++)if(_int()==){
qs[qp]=;qw[qp++]=_int();
}else{
int a=get(_int()),b=get(_int());
while(a!=b){
if(dep[a]<dep[b]){int t=a;a=b;b=t;}
qw[qp++]=a;
aid[a]=id[a];
ed[a]=;
a=f[a]=get(fa[a]);
}
}
for(int i=;i<=n;i++)f[i]=i;
ql=qr=;
q[qr++]=;
while(ql!=qr){
int w=q[ql++];
for(int i=e0[w];i;i=enx[i])if(int u=et[i]){
if(ed[w]&&!ed[u])ed[u]=,f[get(u)]=get(w);
q[qr++]=u;
}
}
for(int i=qp-;~i;i--)
if(qs[i])as[ap++]=aid[get(qw[i])];
else f[get(qw[i])]=get(fa[qw[i]]);
while(ap)int_(as[--ap]);
return ;
}

bzoj3319: 黑白树的更多相关文章

  1. 【BZOJ3319】黑白树 并查集

    [BZOJ3319]黑白树 Description 给定一棵树,边的颜色为黑或白,初始时全部为白色.维护两个操作:1.查询u到根路径上的第一条黑色边的标号.2.将u到v    路径上的所有边的颜色设为 ...

  2. 【BZOJ】3319: 黑白树

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...

  3. 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...

  4. uoj #139. 【UER #4】被删除的黑白树 dfs序 贪心

    #139. [UER #4]被删除的黑白树 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/139 Descript ...

  5. [BZOJ 3319] 黑白树

    3319: 黑白树 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 557  Solved: 194[Submit][Status][Discuss] ...

  6. CodeM美团点评编程大赛初赛B轮 黑白树【DFS深搜+暴力】

    [编程题] 黑白树 时间限制:1秒 空间限制:32768K 一棵n个点的有根树,1号点为根,相邻的两个节点之间的距离为1.树上每个节点i对应一个值k[i].每个点都有一个颜色,初始的时候所有点都是白色 ...

  7. 【UOJ139】【UER #4】被删除的黑白树(贪心)

    点此看题面 大致题意: 请你给一棵树黑白染色,使每一个叶结点到根节点的路径上黑节点个数相同. 贪心 显然,按照贪心的思想,我们要让叶结点到根节点的路径上黑节点的个数尽量大. 我们可以用\(Min_i\ ...

  8. 美团2017年CodeM大赛-初赛B轮-黑白树

    https://ac.nowcoder.com/acm/problem/13249 链接:https://ac.nowcoder.com/acm/problem/13249来源:牛客网 题目描述 一棵 ...

  9. 【uoj#139】[UER #4]被删除的黑白树 贪心

    题目描述 给出一个 $n$ 个节点的树,$1$ 号点为根.现要将其中一些点染成黑色,使得每个叶子节点(不包括根节点)到根节点路径上的黑点数相同.求最多能够染多少个黑点. 题解 贪心 显然有结论:选择的 ...

随机推荐

  1. Why did Jimmy Wales invest in Quora? Is he afraid that it will take over Wikipedia?

    QUESTION: Why did Jimmy Wales invest in Quora? Is he afraid that it will take over Wikipedia? Answer ...

  2. SecureCRT最佳配色方法+直接修改默认配置方法 - imsoft.cnblogs

    SecureCRT默认显示效果是黑白且刺眼的主题,看起来很不舒服.经过一番搜索,总结结果如下,直接设置默认属性,设置一次,不需再改. 效果图: 具体操作方法: Options->Global O ...

  3. android获取inflater

    LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 获取LayoutInflater的方法有如下三种: ? LayoutInflater inflater=(La ...

  4. Asp.net内置对象之Request对象(概述及应用)

    Request对象主要用于获取来自客户端的数据,如用户填入表单的数据.保存在客户端的Cookie等,本文将围绕Request对象,讲解其的主要作用:读取窗体变量.读取查询字符串变量.取得Web服务器端 ...

  5. 小tip: 使用CSS将图片转换成模糊(毛玻璃)效果

    去年盛夏之时,曾写过“小tip: 使用CSS将图片转换成黑白”一文,本文的模式以及内容其实走得是类似路线.CSS3 → SVG → IE filter → canvas. 前段时间,iOS7不是瓜未熟 ...

  6. html部分---样式表,选择器;

    <1.内联样式,优点:控制精确,缺点:代码重用性差,页面代码乱.> <div style="background-color:#0F0"></div& ...

  7. mysql 新建用户

    //===============================================================================  //代理商子账户订单服务器为了安全 ...

  8. Codeforces Round #339 Div.2 B - Gena's Code

    It's the year 4527 and the tanks game that we all know and love still exists. There also exists Grea ...

  9. [poj 3691]DNA repair

    好久没刷 poj 了,今天练习 AC 自动机时去水了一发喵~ 在 poj 上 A 题的感觉并没有 BZOJ 上那么愉悦,准确的说是痛不欲生 真是应了那句老话,你再慢也有比你慢的,你再快也有比你快的…… ...

  10. java的nio之:java的nio系列教程之selector

    一:Java NIO的selector的概述===>Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程 ...