一道dfs序+树状数组的题

因为并没有get到dfs序以及对树状数组也不熟练卡了很久orz

dfs序:

in和out是时间戳

dfs序可以将树转化成为一个序列,满足区间 -> 子树

然后就可以用树状数组之类的维护序列的东东来维护了

int idx = ;
void dfs(int u, int fa)
{
seq[++idx] = u;
in[u] = idx;
for(int i = head[u];i;i = nxt[i])
{
int v = l[i];
if(v != fa)
{
dfs(v, u);
}
}
out[u] = idx;
}
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
using namespace std;
const int SZ = ;
const int INF = 1e9+;
int head[SZ], nxt[SZ], l[SZ], tot = ;
int in[SZ], out[SZ], seq[SZ], a[SZ];
void build(int f, int t)
{
l[++tot] = t;
nxt[tot] = head[f];
head[f] = tot;
}
int idx = ;
void dfs(int u, int fa)
{
seq[++idx] = u;
in[u] = idx;
for(int i = head[u];i;i = nxt[i])
{
int v = l[i];
if(v != fa)
{
dfs(v, u);
}
}
out[u] = idx;
}
int d[SZ], n;
void add(int i, int x)
{
for(; i <= n; i += (i & -i))
d[i] += x;
}
int get(int i)
{
int ans = ;
for(;i;i -= (i & -i))
ans += d[i];
return ans;
}
int query(int l, int r)
{
return get(r) - get(l - );
}
int main()
{
scanf("%d", &n);
for(int i = ; i < n-; i++)
{
int x, y;
scanf("%d %d", &x, &y);
build(x, y);
build(y, x);
}
dfs(, );
/*for(int i = 0; i < 11; i++) printf("%d ", in[i]); printf("\n");
for(int i = 0; i < 11; i++) printf("%d ", out[i]); printf("\n");
for(int i = 0; i < 25; i++) printf("%d ", seq[i]); printf("\n");*/
int m;
scanf("%d", &m);
for(int i = ; i <= n; i++)
add(i, ), a[i] = ;
while(m--)
{
char op;
int x;
scanf("%c", &op);
scanf("%c", &op);
scanf("%d", &x);
if(op == 'Q')
printf("%d\n", query(in[x], out[x]));
if(op == 'C')
{
if(a[in[x]]) {a[in[x]] = ; add(in[x], -); }
else {a[in[x]] = ; add(in[x], ); }
}
}
return ;
}

最新文章

  1. 优化IPOL网站中基于DCT(离散余弦变换)的图像去噪算法(附源代码)。
  2. 浏览器控制台console
  3. 推荐10个 CSS3 制作的创意下拉菜单效果
  4. 百度在线编辑器UEditor(v1.3.6) .net环境下详细配置教程之更改图片和附件上传路径
  5. JUnit笔记
  6. maven 打包 spring 项目
  7. 【MySQL】MySQL/MariaDB的优化器对in子查询的处理
  8. jquery元素定位方法
  9. 问题与对策:CSS的margin塌陷(collapse)
  10. pat_1014
  11. yum puppet 并整合控制台
  12. POJ2396 Budget [有源汇上下界可行流]
  13. linux虚拟化概述
  14. hadoop环境搭建及Wordcount案例实验
  15. java代码示例(4)
  16. Linux 内核的定时机制实验
  17. word怎么在方框中打对号
  18. Leetcode 240 Search a 2D Matrix II (二分法和分治法解决有序二维数组查找)
  19. Rabbitmq安装、集群与高可用配置
  20. L202

热门文章

  1. Caused by: Unable to load bean: type: class:com.opensymphony.xwork2.ObjectFactory - bean - jar
  2. (水题)洛谷 - P1149 - 火柴棒等式
  3. Codeforces626C 【二分】
  4. P5169 xtq的异或和(FWT+线性基)
  5. Luogu P3694 邦邦的大合唱站队 【状压dp】By cellur925
  6. 密码(Password)
  7. 字符串处理 Codeforces Round #305 (Div. 2) A. Mike and Fax
  8. compose 函数实现
  9. JDBC全部分析
  10. Mysql常用命令行大全(转)