CF-825 G.Tree Queries(DFS)
CF-825 G.Tree Queries(DFS)
题目链接
题意
一棵树nnn个节点(初始为白色),两种操作:
- 1 xxx 把节点xxx设置为黑色
- 2 xxx 求节点xxx到任意一个黑色节点的简单路径上的最小编号的节点
输入ttt和zzz,其中ttt表示操作类型,x=(last+z)%n+1x = (last + z) \% n + 1x=(last+z)%n+1,lastlastlast初始为0,2号操作之后更新lastlastlast
默认第一个操作为1
思路
首先选择第一个黑色节点为根节点生成一棵树,并求出每个节点到根节点经过的最小的编号作为每个点的初始答案a[i]a[i]a[i].
每次新增加一个黑色节点uuu,uuu的子节点的值不会改变,但是其他的点可能通过根节点到u点来得到更加小的答案,每次1操作之后记录下根节点往下能到的最小的节点MINMINMIN,2操作的答案就是min(a[i],MIN)min(a[i], MIN)min(a[i],MIN)
#include <bits/stdc++.h>
const int maxn = 1e6 + 5;
using namespace std;
vector<int> g[maxn];
int a[maxn];
void dfs(int u, int d) {a[u] = d;for (int i = 0; i < (int)g[u].size(); ++i) {int v = g[u][i];if (a[v]) continue;dfs(v, min(d, v));}
}
int main() {int n, q;scanf("%d %d", &n, &q);for (int i = 1; i < n; ++i) {int u, v;scanf("%d %d", &u, &v);g[u].push_back(v);g[v].push_back(u);}int last = 0, op, d;scanf("%d %d", &op, &d); d = (d + last) % n + 1;dfs(d, d);int tmp = d;while (--q) {scanf("%d %d", &op, &d);d = (d + last) % n + 1;if (op == 1) tmp = min(tmp, a[d]);else {last = min(tmp, a[d]);printf("%d\n", last);}}return 0;
}
CF-825 G.Tree Queries(DFS)相关推荐
- Educational Codeforces Round 25 G. Tree Queries
题目链接:Educational Codeforces Round 25 G. Tree Queries 题意: 给你一棵树,一开始所有的点全是黑色,有两种操作. 1 x 将x这个点变为黑色,保证第一 ...
- CodeForces - 1328E Tree Queries(dfs序/LCA)
题目链接:点击查看 题目大意:给出一棵以点 1 为根节点的树,接下来有 m 次询问,每次询问给出 k 个点,题目问我们能否找到一个点 u ,使得从根节点到点 u 的简单路径,到 k 个点的每个点的距离 ...
- Codeforces Round #316 (Div. 2) D. Tree Requests dfs序
题目链接: 题目 D. Tree Requests time limit per test:2 seconds memory limit per test:256 megabytes 问题描述 Rom ...
- E:Tree Queries(假树链剖分写法)
博客园地址 E:Tree Queries 思路 当我写完A完这道题后,百度了一下,发现好像没有人是用类树链剖分来写的,都是LCALCALCA,于是我就来水一篇树链剖分题解了. 第一步:贪心取点 我们可 ...
- cf #825 Div.2(A~C2)
Cf #825 Div.2 文章目录 Cf #825 Div.2 [A. Make A Equal to B](https://codeforces.com/contest/1736/problem/ ...
- 树链剖分 or 根号分治 + dfs序 + 树状数组 ---- CF1254 D. Tree Queries
题目链接 题目大意: 问题转化: 很容易发现:假设修改的节点是vvv. 1.vvv的子树sonvson_vsonv直接加上(n−size[sonv])n×d\frac{(n-size[son_v]) ...
- LCA ---- E. Tree Queries[LCA或者dfs序的解法]
题目链接 题目大意:就是给你一颗树,然后qqq次询问每次询问会给出kkk个点,要求你判断一下这些点是否在存在一条从1到某个点u的链使得这k个点都在这条链上或者距离这条链距离为1的位置上 解法1:dfs ...
- Codeforces 375D - Tree and Queries(dfs序+莫队)
题目链接:http://codeforces.com/contest/351/problem/D 题目大意:n个数,col[i]对应第i个数的颜色,并给你他们之间的树形关系(以1为根),有m次询问,每 ...
- CF 678F Lena and Queries
一个空集,有 n(≤30w) n(≤30w)个操作: 1)集合加入对 (a,b)(−109≤a,b≤109) (a,b)(-10^9≤a,b≤10^9) 2)移除 ith i_{th}操作加入的对 3 ...
最新文章
- VS2010非永久性配置和永久配置Opencv
- 如何部署深度学习模型?
- 水晶报表主子报表分页问题
- 几款常用的编辑器介绍,给刚入门学Web前端的人
- mysql表空间转移_mysql共享表空间扩容,收缩,迁移
- Mybatis中Mapper.xml文件sql中动态获取----#{}和${}区别
- linux系统修复找不到原安装,Linux 系统用安装盘来修复GRUB 详解
- negative binomial(Pascal) distribution —— 负二项式分布(帕斯卡分布)
- python快速开发框架_GitHub - lee2029/pyui4win: 一个用python实现业务逻辑、用xml和html/css/js描述界面的windows程序的快速开发框架...
- 穿过已知点画平滑曲线-lua
- 解决Java下载Zip压缩文件,解压后报不可预料的压缩文件末端
- android html footer 固定,footer保持在页面底部的两种方法
- 计算机硬件环境指啥,硬件环境指的是什么呢?
- OpenGL LookAt、Camera摄像机
- AVD模拟器一直处于开机状态打不开的解决办法
- PDPS教程:机器人气动点焊焊枪大开与小开运动状态自动切换设置
- 记录一次h5上传身份证照片、上传人面像
- How to design an FPGA from scratch-1_FPGA_8_24
- 刚刚,2022中科院分区表发布(附下载)
- 窗口过程,窗口过程函数