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条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择一个村庄,瞬间转移到这个村庄 ...
随机推荐
- oracle 创建自增主键
1.创建表 create table Test_Increase( userid number(10) NOT NULL primary key, /*主键,自动增加*/ username varch ...
- [SharePoint2010开发入门经典]10、使用SPS2010构建面向服务的应用程序
本章概要: 1.使用SPS自带的web service 2.构建自定义web service 3.使用不同的客户端解决方案部署自定义站点
- T4系列文章之2:T4工具简介、调试以及T4运行原理
一.前言 经过第一篇,我想大家现在对T4有了基本的印象,应该对T4有了一个大致的了解吧.现在,我们接着来讲一下T4的工具,然后下一篇我就开始T4的用法了.各位客官,就等了. 二.工具介绍 2.1 上图 ...
- 基本socket api
socket函数,为了执行网络I/O,一个进程必须做的第一件事就是调用socket函数,并且指定通信协议类型. #include<sys/socket.h> int socket (int ...
- tomcat配置一个服务监听两个端口
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" ...
- 网易NAPM Andorid SDK实现原理--转
原文地址:https://neyoufan.github.io/2017/03/10/android/NAPM%20Android%20SDK/ NAPM 是网易的应用性能管理平台,采用非侵入的方式获 ...
- Re:从0开始的微服务架构--(二)快速快速体验微服务架构?--转
原文地址:https://mp.weixin.qq.com/s/QO1QDQWnjHZp8EvGDrxZvw 这是专题的第二篇文章,看看如何搭建一个简单模式的微服务架构. 记得好久之前看到一个大牛说过 ...
- Asp.net Web Api中使用配置Unity
第一步:建立web api,添加unity.webapi. 第二步:在添加了该引用之后,在App_Start中会自动生成UnityConfig.cs文件 第三步:添加数据做测试 第四步:展示效果
- java同步锁的正确使用
同步锁分类 对象锁(this) 类锁(类的字节码文件对象即类名.class) 字符串锁(比较特别) 应用场景 在多线程下对共享资源的安全操作. 需求:启动5个线程对共享资源total进行安全操作. 同 ...
- Android 实现调用系统拍照相册,剪切功能
1.XML布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr ...