题目

牛半仙的妹子的座位呈一个树状结构,由 n 个点和 n−1 条边组成, 1 号结点为根。
当牛半仙的一个妹子无视 牛半仙后,一个单位时间后周围的妹子也会无视牛半仙。
有些时候牛半仙为了吸引妹子们的注意,会开启鬼畜模式,这时所有妹子无视牛半仙的状态都会消失,
恢复正常,并且这之后的状态不会被之前影响。
牛半仙想知道某个妹子是否无视了他,于是他找到了你,请你帮帮他

题解&思路

自己的思路:

感觉这还是一道较为简单的树剖题...(TM调了一天)

当询问的x满足

v是操作后最初的无视节点,now是当前时刻

然后转化一下即可:

把每一个v放在lca上,这样就是链修改链查询了,然后直接上树剖即可

可是为什么这道题调了一天呢??还是一个细节问题::

void change( int x , int u ){int t = dep[x] + u;if( top[x] != 1 ){modify( 1 , id[top[x]] , id[x] ,t );x = fa[top[x]];}modify( 1 , 1 , id[x] ,t );
}

TM把树剖的修改写成这样了。。。。while写成了if

细节部分一定要引以为戒,在用眼查的时候最好就先查出来!!!

代码

#include <bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
const int MAXN = 1e5 + 3;
int n , m , head[MAXN] , cnt = 1;
int dep[MAXN] , dfn[MAXN] , zson[MAXN] , top[MAXN] ,fa[MAXN] , inde , id[MAXN] , siz[MAXN];
struct edge{int to , nex ;
}G[MAXN<<1];
void add_edge( int x, int y ){G[cnt].nex = head[x] , G[cnt].to = y;head[x] = cnt ++;
}
void dfs( int x , int f ){siz[x] = 1;for( int i = head[x] ; i ; i =G[i].nex ){int v = G[i].to;if( v == f ) continue;dep[v] = dep[x] + 1;fa[v] = x;dfs( v , x );siz[x] += siz[v];if( !zson[x] || siz[zson[x]] < siz[v] ) zson[x] = v;}
}
void dfs1( int x, int f ){top[x] = f;dfn[++inde] = x;id[x] = inde;if( !zson[x] ) return ;dfs1( zson[x] , f );for( int i = head[x] ; i ; i = G[i].nex ){int v =G[i].to;if( v == fa[x] || v == zson[x] ) continue;dfs1( v , v );}
}
struct tree{int l , r , lazy , minn , lazy1;
}tre[MAXN<<2];
void build( int i , int l , int r ){tre[i].l = l , tre[i].r = r , tre[i].lazy = tre[i].lazy1 = 0 , tre[i].minn = inf;if( l == r ) return ;int mid = l + r >> 1;build( i << 1 , l , mid );build( i << 1 | 1,  mid + 1, r );
}
void pushdown( int i ){if( tre[i].lazy1 ){tre[i<<1].minn = tre[i<<1|1].minn = inf , tre[i<<1].lazy1 = tre[i<<1|1].lazy1 = inf;tre[i<<1].lazy = tre[i<<1|1].lazy = 0;tre[i].lazy1 = 0 ;}if( tre[i].lazy ){tre[i<<1].minn = min( tre[i<<1].minn , tre[i].lazy - 2 * dep[dfn[tre[i<<1].r]] );if( !tre[i<<1].lazy ) tre[i<<1].lazy = tre[i].lazy;else tre[i<<1].lazy = min( tre[i<<1].lazy , tre[i].lazy );tre[i<<1|1].minn = min( tre[i<<1|1].minn , tre[i].lazy - 2 * dep[dfn[tre[i<<1|1].r]] );if( !tre[i<<1|1].lazy ) tre[i<<1|1].lazy = tre[i].lazy;elsetre[i<<1|1].lazy = min( tre[i<<1|1].lazy , tre[i].lazy );tre[i].lazy = 0;}
}
void modify( int i , int l , int r , int delta ){if( tre[i].l > r || tre[i].r < l ) return;if( tre[i].l >= l && tre[i].r <= r ){if( delta != inf ){tre[i].minn = min( tre[i].minn , delta - 2 * dep[dfn[tre[i].r]] );if( !tre[i].lazy ) tre[i].lazy = delta;else tre[i].lazy = min( delta , tre[i].lazy );}else{tre[i].lazy1 = inf , tre[i].minn = inf;//tre[i].lazy = 0;}return ;}pushdown( i );modify( i << 1 , l , r , delta );modify( i << 1 | 1, l , r , delta );tre[i].minn = min( tre[i<<1].minn , tre[i<<1|1].minn );
}
int query( int i , int l , int r ){if( tre[i].l > r || tre[i].r < l ) return inf;if( tre[i].l >= l && tre[i].r <= r ){return tre[i].minn;}pushdown( i );int ans = query( i << 1 , l , r );ans = min( ans , query( i << 1 | 1 , l , r )) ;tre[i].minn = min( tre[i<<1].minn , tre[i<<1|1].minn );return ans;
}
void change( int x , int u ){int t = dep[x] + u;if( top[x] != 1 ){modify( 1 , id[top[x]] , id[x] ,t );x = fa[top[x]];}modify( 1 , 1 , id[x] ,t );
}
void get_ans( int x , int u ){int t = u - dep[x];while( top[x] != 1 ){int tot = query( 1 , id[top[x]] , id[x] );if( tot <= t ){printf( "wrxcsd\n" );return ;}x = fa[top[x]];}int tot = query( 1 , 1 , id[x] );if( tot <= t )printf( "wrxcsd\n" );elseprintf( "orzFsYo\n" );
}
int main(){//freopen( "B.out" , "r" , stdin );//freopen( "C.out" , "w" , stdout );scanf( "%d%d" , &n , &m );dep[1] =1;for( int i = 1 ; i < n ; i ++ ){int x , y;scanf( "%d%d" , &x , &y );add_edge( x , y);add_edge( y , x );}dfs( 1,0 );dfs1( 1 , 1 );build( 1 , 1 , n );int u = 0;while( m -- ){u ++;int op , x;scanf( "%d%d" , &op , &x );if( op == 1 ){change( x , u );}else if( op == 2 )modify( 1 , 1 , n , inf );else{get_ans( x , u );}}return 0;
}

牛半仙的妹子Tree(Nowcoder)相关推荐

  1. 牛客 - 牛半仙的妹子Tree(按询问分块+RMQ求LCA)

    题目链接:点击查看 题目大意:给出一棵有 n 个节点的树,需要执行 m 次操作: 1 x:点 x 被染色,且随后每一秒染色的区域都会向外扩展一个单位 2 x:清空所有的染色 3 x:问点 x 是否被染 ...

  2. 【10.22 牛客普及(三)】 牛半仙的妹子串 题解

    [10.22 牛客普及(三)] 牛半仙的妹子串 题解 题目 牛半仙有 n n n 个妹子. 牛半仙用对于每个妹子都有一个名字,并且给了每个妹子一个评分. 牛半仙的审美与名字有关,他想知道名字以某字母结 ...

  3. 2020牛客NOIP赛前集训营-提高组(第三场)C-牛半仙的妹子Tree【虚树,最短路】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/7609/C 题目大意 给出nnn个点的一棵树,mmm个时刻各有一个操作 标记一个点,每个点被标记后的每一个时刻 ...

  4. 【牛客NOIP模拟】牛半仙的妹子序列【DP】【Segment Tree Beats】

    题意:排列的极长上升子序列个数 n≤2×105n\leq 2\times 10^5n≤2×105 显然有个 dp fn=∑i<n,pi<pn,∄i<j<ns.t. pi< ...

  5. 牛客 - 牛半仙的妹子图(并查集+bitset/克鲁斯卡尔重构树+主席树)

    题目链接:点击查看 题目大意:给出一个由 n 个点和 m 条边组成的连通图,每个点都有一种颜色,每条边都有一个权值,现在规定一个起点 st,再给出 q 次询问,每次询问给出区间 [ l , r ] , ...

  6. 2020牛客NOIP赛前集训营-普及组第三场C牛半仙的妹子树

    链接:https://ac.nowcoder.com/acm/contest/7608/C 来源:牛客网 牛半仙有 n​ 个妹子,她们所在的位置组成一棵树,相邻两个妹子的距离为 1​. 有 m​ 个妹 ...

  7. T4牛半仙的魔塔(增强版)

    题目描述 牛半仙的妹子被大魔王抓走了,牛半仙为了就他的妹子,前往攻打魔塔. 魔塔为一棵树,牛半仙初始在一号点. 牛半仙有攻击,防御,血量三个属性. 除一号点外每个点都有魔物防守,魔物也有攻击,防御,血 ...

  8. 【排序】【牛客模拟赛】牛半仙的妹子串

    小目录 链接 题目描述 输入 输出 样例输入 样例输出 数据范围或提示 思路 代码 链接 A-牛半仙的妹子串 题目描述 牛半仙有 n n_{} n​个妹子. 牛半仙用对于每个妹子都有一个名字,并且给了 ...

  9. F-选座椅_牛客小白月赛61 (nowcoder.com) 双指针,差分,2021济南ICPC- K Search For Mafuyu (pintia.cn) dfs

    F-选座椅_牛客小白月赛61 (nowcoder.com) 双指针,差分 如果区间[l,r]满足所有条件,那么包含[l,r]的区间也一定是满足条件的,那就考虑双指针遍历每一个区间,如果当前区间满足条件 ...

最新文章

  1. Leangoo看板Jenkins配置指南
  2. svn文件同步到web服务器,即同步到网站根目录
  3. b类 蚂蚁金服_股权设计与合伙制,解析蚂蚁金服与华为的顶层结构
  4. 基因结构显示服务器,服务器固定结构 Server fixed structure
  5. 领域驱动 开源项目_我如何在开源领域找到工作
  6. jenkins启动/重启/停止命令 改端口
  7. python打印json_Python漂亮打印JSON
  8. 机械革命计算机配置,机械革命笔记本Bios设置方法
  9. 转载:《游戏论(一)》——一篇有点意思的文章
  10. ping 不通 华为三层交换机vlan_华为三层交换机VLAN间路由怎么设置
  11. 搜索关键词优化 助力全网霸屏营销
  12. Mackdown 编辑器-马克飞象
  13. html 整个页面淡入浅出,css3网页的淡入淡出效果
  14. 计算机搜索文件时找不到搜索按钮,win7搜索功能 为什么明明有那个文件却搜索不到呢?-win7搜索不到文件,win7搜索文件内容搜不出来...
  15. 【转】加油站压力/真空阀(PV阀)的工作原理及安全注意事项
  16. android 解压rar5,rar解压软件安卓中文
  17. windows计划任务执行,但是程序未执行
  18. 从Hexo迁移到Hugo最强攻略
  19. html files是什么文件夹,电脑硬盘里的program files文件夹是什么意思
  20. Android文档及学习资料整理 【至2011年7月】

热门文章

  1. 字节跳动笔试面试经历
  2. OpenGL学习笔记(四)-光照-材质-光照贴图
  3. 低文凭的程序员,以后出路在哪儿
  4. 中国银行现货黄金过程中如何克服浮躁心理?
  5. ip地址与网络上的其他系统有冲突怎么解决
  6. 连续系统离散化的几种方法
  7. 构建自己的即时聊天系统(基于xmpp)(转载)
  8. 腾讯miniStation评测 打造完美安卓游戏主机
  9. Win11任务栏太宽了怎么变窄?
  10. New 21 Game 新21点