树状数组 || POJ 3321 Apple Tree
2024-10-21 05:56:27
一道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 ;
}
最新文章
- 优化IPOL网站中基于DCT(离散余弦变换)的图像去噪算法(附源代码)。
- 浏览器控制台console
- 推荐10个 CSS3 制作的创意下拉菜单效果
- 百度在线编辑器UEditor(v1.3.6) .net环境下详细配置教程之更改图片和附件上传路径
- JUnit笔记
- maven 打包 spring 项目
- 【MySQL】MySQL/MariaDB的优化器对in子查询的处理
- jquery元素定位方法
- 问题与对策:CSS的margin塌陷(collapse)
- pat_1014
- yum puppet 并整合控制台
- POJ2396 Budget [有源汇上下界可行流]
- linux虚拟化概述
- hadoop环境搭建及Wordcount案例实验
- java代码示例(4)
- Linux 内核的定时机制实验
- word怎么在方框中打对号
- Leetcode 240 Search a 2D Matrix II (二分法和分治法解决有序二维数组查找)
- Rabbitmq安装、集群与高可用配置
- L202
热门文章
- Caused by: Unable to load bean: type: class:com.opensymphony.xwork2.ObjectFactory - bean - jar
- (水题)洛谷 - P1149 - 火柴棒等式
- Codeforces626C 【二分】
- P5169 xtq的异或和(FWT+线性基)
- Luogu P3694 邦邦的大合唱站队 【状压dp】By cellur925
- 密码(Password)
- 字符串处理 Codeforces Round #305 (Div. 2) A. Mike and Fax
- compose 函数实现
- JDBC全部分析
- Mysql常用命令行大全(转)