dfs序题集
dfs序可以维护一个子树内的信息
需要记录dfs进的时间以及所有子树都遍历完的时间
void dfs(int u, int fa)
{
L[u] = ++id;
for(int i = head[u]; ~i; i = e[i].next)
{
int v = e[i].to;
if(v == fa) continue;
dfs(v, u);
}
R[u] = id;
}
那么对于点i,L[i]到R[i]就是i的子树(包括i)
那么子树内维护信息就可以用树状数组,线段树之内的乱搞了。
poj 3321
用树状数组维护就好。
注意修改的时候一定是修改序列
#include<cstdio>
#include<cstring>
#include<cctype>
#define REP(i, a, b) for(register int i = (a); i < (b); i++)
#define _for(i, a, b) for(register int i = (a); i <= (b); i++)
using namespace std; const int MAXN = 1e5 + ;
struct Edge{ int to, next; };
Edge e[MAXN << ];
int head[MAXN], num, n, m;
int L[MAXN], R[MAXN], s[MAXN], id; struct Binary_Index_Tree
{
int f[MAXN]; Binary_Index_Tree() { memset(f, , sizeof(f)); } int lowbit(int x) { return x & (-x); } void add(int x, int p)
{
while(x <= n)
{
f[x] += p;
x += lowbit(x);
}
} int sum(int x)
{
int res = ;
while(x)
{
res += f[x];
x -= lowbit(x);
}
return res;
} int query(int l, int r) { return sum(r) - sum(l - ); }
}S; void read(int& x)
{
int f = ; x = ; char ch = getchar();
while(!isdigit(ch)) { if(ch == '-') f = -; ch = getchar(); }
while(isdigit(ch)) { x = x * + ch - ''; ch = getchar(); }
x *= f;
} void AddEdge(int to, int from)
{
e[num] = Edge{to, head[from]};
head[from] = num++;
} void dfs(int u, int fa)
{
L[u] = ++id;
for(int i = head[u]; ~i; i = e[i].next)
{
int v = e[i].to;
if(v == fa) continue;
dfs(v, u);
}
R[u] = id;
} int main()
{
memset(head, -, sizeof(head)); num = ;
read(n);
REP(i, , n)
{
int u, v; read(u), read(v);
AddEdge(u, v); AddEdge(v, u);
}
_for(i, , n)
{
s[i] = ;
S.add(i, );
} dfs(, -);
read(m); while(m--)
{
char op[]; int x;
scanf("%s", op); read(x);
if(op[] == 'Q') printf("%d\n", S.query(L[x], R[x]));
else
{
int id = L[x];
if(s[id]) S.add(id, -);
else S.add(id, );
s[id] = !s[id];
}
} return ;
}
dfs序题集的更多相关文章
- 咸鱼的ACM之路:DFS水题集
DFS的核心就是从一种状态出发,转向任意的一个可行状态,直到达到结束条件为止.(个人理解) 下面全是洛谷题,毕竟能找到测试点数据的OJ我就找到这一个....在其他OJ上直接各种玄学问题... P159 ...
- 【HDU4366】【DFS序+分块】Successor
Problem Description Sean owns a company and he is the BOSS.The other Staff has one Superior.every st ...
- hdu6200 mustedge mustedge mustedge (并查集+dfs序树状数组)
题意 给定一个n个点m条边无向图(n,m<=1e5) 支持两个操作 1.添加一条边 2.询问点u到点v的所有路径中必经边的条数 操作数<=1e5 分析 第一眼看起来像是要动态维护无向图的边 ...
- Codeforces 571D - Campus(并查集+线段树+DFS 序,hot tea)
Codeforces 题目传送门 & 洛谷题目传送门 看到集合的合并,可以本能地想到并查集. 不过这题的操作与传统意义上的并查集不太一样,传统意义上的并查集一般是用来判断连通性的,而此题还需支 ...
- 【做题】SDOI2017苹果树——dfs序的运用
原文链接 https://www.cnblogs.com/cly-none/p/9845046.html 题意:给出一棵\(n\)个结点的树,在第\(i\)个结点上有\(a_i\)个权值为\(v_i\ ...
- BZOJ4699 树上的最短路(最短路径+dfs序+线段树+堆+并查集)
首先一般化的将下水道和塌陷看成一个东西.注意到在从源点出发的所有需要使用某条下水道的最短路径中,该下水道只会被使用一次,该下水道第一个被访问的点相同,且只会在第一个访问的点使用该下水道.这个第一个访问 ...
- poj3321 dfs序+树状数组单点更新 好题!
当初听郭炜老师讲时不是很懂,几个月内每次复习树状数组必看的题 树的dfs序映射在树状数组上进行单点修改,区间查询. /* 树状数组: lowbit[i] = i&-i C[i] = a[i-l ...
- BZOJ 4765 普通计算姬 dfs序+分块+树状数组+好题!!!
真是道好题...感到灵魂的升华... 按dfs序建树状数组,拿前缀和去求解散块: 按点的标号分块,分成一个个区间,记录区间子树和 的 总和... 具体地,需要记录每个点u修改后,对每一个块i的贡献,记 ...
- 刷题总结——寻宝游戏(bzoj3991 dfs序)
题目: Description 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择一个村庄,瞬间转移到这个村庄 ...
随机推荐
- find命令扩展
1.1 方法一 |xargs 通过|xargs将前面命令的执行结果传给后面. [root@znix ~]# find /clsn/ -type f -name "*.sh" |x ...
- 猫狗分类--Tensorflow实现
贴一张自己画的思维导图 数据集准备 kaggle猫狗大战数据集(训练),微软的不需要FQ 12500张cat 12500张dog 生成图片路径和标签的List step1:获取D:/Study/Py ...
- Spring学习总结(18)——Spring整合Mysql数据库一主多从、多主多从配置
一.新建jdbc.properties配置文件 master.jdbc.driverClassName=com.mysql.jdbc.Driver master.jdbc.url=jdbc:mysql ...
- HDU 1215
由算术基本定理, 直接使用公式就好 #include <iostream> #include <cstdio> #include <algorithm> #incl ...
- 八皇后问题java实现
八皇后问题java实现 public class eightqueen { public static int count=0; public static void main(String[] ar ...
- [HTML 5] aria-hidden
You want to use aria-hidden to prevent screen reader to access some content should be hidden from us ...
- 用友ERP T6技术解析(六) 库龄分析
2.4 库存管理 2.4.1 库龄分析 介绍:库存账龄是在某时间节点,某种或某类存货的库存时间的加权平均值,跟库存周转率关系明显,库存周转率越高,库存账龄越低,可是二者又不是反比关系.不能简单把库 ...
- [Android]RecyclerView的简单演示样例
去年google的IO上就展示了一个新的ListView.它就是RecyclerView. 下面是官方的说明,我英语能力有限,只是我大概这么理解:RecyclerView会比ListView更具有拓展 ...
- java连接mysql数据库增删改查操作记录
1. 连接数据库.得到数据库连接变量 注意连接数据库的时候 (1)打开DB Browser 新建一个Database Driver,注意加入Driver JARs的时候加入的包,我的是mysql-co ...
- c12---数组
// // main.c // 数组基本概念 // // Created by xiaomage on 15/6/9. // Copyright (c) 2015年 itcast. All right ...