题意: 就是有一颗树  然后每次询问 父结点 的 第k个结点是不是他的子嗣...是的话就输出这个子嗣..不是 就输出-1 解析: 突然想到后缀数组的sa 和 x的用法..就是我们可以用一个id标记当前结点的等级 用idx标记等级ans是哪一个结点..然后用en标记结点u的子嗣的结束结点 然后每次判断一下就可以了 #include <iostream> #include <cstdio> #include <sstream> #include <cstring>…
J - Military Problem CodeForces - 1006E 就是一道dfs序的问题 给定一个树, 然后有q次询问. 每次给出u,k, 求以u为根的子树经过深搜的第k个儿子,如果一个节点有多个儿子,按照儿子从小到大的顺序,依次访问,不存在则输出-1. 预处理记录一下每个节点的出入时间 最后每次query直接判断就好了 #include <cstdio> #include <algorithm> #include <vector> using names…
2435: [Noi2011]道路修建 Description 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿意修建恰好 n – 1条双向道路. 每条道路的修建都要付出一定的费用, 这个费用等于道路长度乘以道路两端的国家个数之差的绝对值.例如,在下图中,虚线所示道路两端分别有 2 个.4个国家,如果该道路长度为 1,则费用为1×|2 – 4|=2.图中圆圈里的数字表示国家的编号. 由于国家的数量十分庞…
CodeForces 877E DFS序+线段树 题意 就是树上有n个点,然后每个点都有一盏灯,给出初始的状态,1表示亮,0表示不亮,然后有两种操作,第一种是get x,表示你需要输出x的子树和x本身一共有几个灯是亮的.pow x,表示你需要改变x的子树和x本身上的灯的状态. 题解思路 这个题肯定是用DFS序了,为啥?因为树不好操作啊(我也不会啊),使用DFS序可以把树压成一维的一串数,这样就可以使用线段树来进行区间操作了. 话说这个题是我暑假限时训练中做的,看到这个题老开心了,但是让我万万没想…
B - Save the problem! CodeForces - 867B 这个题目还是很简单的,很明显是一个构造题,但是早训的时候脑子有点糊涂,想到了用1 2 来构造, 但是去算这个数的时候算错了... 用1 2 来构造 可以先枚举一些数来找找规律. 1 1 2 2 3 1 1 1    2 1 1 4 .... 可以发现每一个数都是 n/2+1 的可能, 所以反过来推过去就是 (s-1)*2  或者(s-1)*2+1 这个(s-1)*2+1的答案才是正确答案 因为 这个s可以==1 #i…
http://codeforces.com/contest/1006/problem/E 题意: 就是给出n,m,共n个点[1,n],m次询问.第二行给出n-1个数a[i],2<=i<=n:a[i]表示i的父亲节点是a[i]. 按照题目给构建一棵树,每次询问,找到从一个结点u开始DFS到第k个的节点编号是多少,这样的点不存在时输出-1. 思路: 如果对每个查询都DFS一次,必超时 所以必须预处理 这里用vector存边,用son[i]表示编号为i的点自身+孩子结点的总个数 ,用rk[i]表示遍…
题意:建一颗以\(1\)为根结点的树,询问\(q\)次,每次询问一个结点,问该结点的第\(k\)个子结点,如果不存在则输出\(-1\). 题解:该题数据范围较大,需要采用dfs预处理的方法,我们从结点\(1\)开始向下找,\(ans\)数组记录的是,第\(x\)次查找时的结点,\(path\)表示某个结点所需的查找次数,\(siz\)数组表示某个结点的子结点个数.之后每次询问时,判断一下情况是否成立,如果成立,先找出该结点所对应的查找次数(\(path[u]\)),向下找第\(k\)个子结点即可…
E. Little Girl and Problem on Trees time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output A little girl loves problems on trees very much. Here's one of them. A tree is an undirected connected g…
题意问,这个点的然后求子树的第i个节点. 这道题是个非常明显的DFS序: 我们只需要记录DFS的入DFS的时间,以及出DFS的时间,也就是DFS序, 然后判断第i个子树是否在这个节点的时间段之间. 最后用一个映射,把相应DFS序对应的节点编号写入.即可 #include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> #include<vector> using…
Cyclic Components CodeForces - 977E You are given an undirected graph consisting of nn vertices and mm edges. Your task is to find the number of connected components which are cycles. Here are some definitions of graph theory. An undirected graph con…