Apple Tree poj-3321

    题目大意:给你一个根固定的树,每一个点的点权是0或1,查询子树点权和。

    注释:$1\le n \le 10^5$。

      想法:刚刚学习dfs序,刷到水题偶哈哈。

        什么是dfs序?就是在遍历树的时候记录的每个点的出栈入栈序。这样就可以保证每一个节会出现两次且它的子树被其夹在中间。

      然后,子树信息就可以通过维护序列的鬼东西维护了qwq。

      紧接着,我们用树状数组维护被节点夹着的区间,就是端点节点的子树,用树状数组更新即可。

    最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 100010
using namespace std;
int tot,cnt;
int to[2*maxn],head[maxn],nxt[2*maxn];
int d[2*maxn];
int p1[maxn],p2[maxn];
int tree[4*maxn];
inline void add(int x,int y)
{
to[++tot]=y;
nxt[tot]=head[x];
head[x]=tot;
}
int lowbit(int x)
{
return x&(-x);
}
void dfs(int pos,int fa)//初始构造dfs序
{
d[++cnt]=1;
p1[pos]=cnt;
for(int i=head[pos];i;i=nxt[i])
{
if(to[i]==fa) continue;
dfs(to[i],pos);
}
p2[pos]=cnt;
}
void fix(int x,int ch)
{
for(int i=x;i<=cnt;i+=lowbit(i))
{
tree[i]+=ch;
}
}
int query(int x)
{
int ans=0;
for(int i=x;i;i-=lowbit(i))
{
ans+=tree[i];
}
return ans;
}
void original()
{
cnt=tot=0;
memset(tree,0,sizeof tree);
memset(head,0,sizeof head);
}
int main()
{
int n,m;
while(~scanf("%d",&n))
{
original();
for(int a,b,i=1;i<n;i++)
{
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
dfs(1,0);
for(int i=1;i<=n;i++)//别忘了建树
{
fix(p1[i],1);
}
// for(int i=1;i<=cnt;i++)
// {
// printf("%d ",query(i));
// }
// puts("");
char s[20];
scanf("%d",&m);
for(int x,i=1;i<=m;i++)
{
scanf("%s",s+1);
if(s[1]=='C')
{
scanf("%d",&x);
if(d[p1[x]]==1) fix(p1[x],-1);
else fix(p1[x],1);
d[p1[x]]^=1;
}
else
{
scanf("%d",&x);
printf("%d\n",query(p2[x])-query(p1[x]-1));
}
}
}
return 0;
}
// int main()
// {
// int n;
// scanf("%d",&n);
// for(int a,b,i=1;i<n;i++)
// {
// scanf("%d%d",&a,&b);
// add(a,b);
// add(b,a);
// }
// dfs(1,0);
// for(int i=1;i<=cnt;i++)
// {
// printf("%d ",d[i]);
// }
// puts("");
// for(int i=1;i<=n;i++)
// {
// printf("%d %d\n",p1[i],p2[i]);
// }
// return 0;
// }

    小结:dfs序好东西好东西... ...

[poj3321]Apple Tree_dfs序_树状数组的更多相关文章

  1. [bzoj1103][POI2007]大都市meg_dfs序_树状数组

    大都市meg bzoj-1103 POI-2007 题目大意:给定一颗n个点的树,m次操作.将一条路的边权更改成0:查询一个点到根节点的点权和.开始的时候所有边的边权都是1. 注释:$1\le n,m ...

  2. BZOJ_5055_膜法师_树状数组+离散化

    BZOJ_5055_膜法师_树状数组+离散化 Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇宙的膜法师,想偷取其中的三个维度为伟大的长者续秒, 显然 ...

  3. BZOJ_3653_谈笑风生_树状数组

    BZOJ_3653_谈笑风生_树状数组 Description 设T 为一棵有根树,我们做如下的定义: ? 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称“a比b不知道 高明到哪里去了”. ...

  4. BZOJ_2141_排队_树状数组+分块

    BZOJ2141_排队_树状数组+分块 Description 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家 乐和和.红星幼儿园的小朋友们排起了 ...

  5. BZOJ 2819: Nim dfs序维护树状数组,倍增

    1.随机选两个堆v,u,询问若在v到u间的路径上的石子堆中玩Nim游戏,是否有必胜策略,如果有,vfleaking将会考虑将这些石子堆作为初始局面之一,用来坑玩家.2.把堆v中的石子数变为k. 分析: ...

  6. BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树

    BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排 ...

  7. BZOJ_3132_上帝造题的七分钟_树状数组

    BZOJ_3132_上帝造题的七分钟_树状数组 Description “第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a,b), ...

  8. BZOJ 4999: This Problem Is Too Simple! DFS序+LCA+树状数组+离线

    Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) , ...

  9. HDU 6203 ping ping ping(dfs序+LCA+树状数组)

    http://acm.hdu.edu.cn/showproblem.php?pid=6203 题意: n+1 个点 n 条边的树(点标号 0 ~ n),有若干个点无法通行,导致 p 组 U V 无法连 ...

随机推荐

  1. canvas 文字转化为粒子

    var canvas = document.createElement('canvas'); var cxt = canvas.getContext('2d'); var W = canvas.wid ...

  2. mysql在linux下的安装(5.7版本以后)

    1.添加mysql组和mysql用户,用于设置mysql安装目录文件所有者和所属组. ①groupadd mysql ②useradd -r -g mysql mysql 2.将二进制文件解压到指定的 ...

  3. JavaScript--编程题

    某班的成绩出来了,现在老师要把班级的成绩打印出来. 效果图: XXXX年XX月X日 星期X--班级总分为:81 格式要求: 1.显示打印的日期. 格式为类似“XXXX年XX月XX日 星期X” 的当前的 ...

  4. UE4源码版食用要记

    UE4源码版和预编译版不能共享工程,这和插件版是一样的. 一般来说我都是在VS中生成编辑器,于编辑器中添加新类,VS中编辑代码. 编译引擎的时候编译配置使用的是devepolmenteditor.开发 ...

  5. crontab的使用

    基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 第4列表示 ...

  6. String字符串的完美度

    题目详情: 我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定,但不同字母的完美度不同, 而一个字符串的完美度等于它里面所有字母的完美度之和,且不在乎字母大小写,也就是说字母F和f的完美度 ...

  7. Windows10开启热点

    1.以网线的连接方式,已经连接. 2.打开CMD 3. 开启热点 3.1设置热点名称和密码 netsh wlan set hostednetwork mode=allow ssid=name key= ...

  8. iOS CoreData 开发

    新年新气象,曾经的妹子结婚了,而光棍的我决定书写博客~ 废话结束. 本人不爱使用第三方的东东,喜欢原汁原味的官方版本,本次带来CoreData数据存储篇~ 创建应用

  9. checkbox与文字混排无法对齐到一行的解决办法

    直接上代码: <span><input style="vertical-align:middle" type="checkbox" name= ...

  10. C# 处理URL地址

    calendarset.do?start=1548518400&end=1552147200&_=1546421856958calendarset.do?start=155093760 ...