POJ3321[苹果树]--DFS序+树状数组
来源:互联网 发布:nginx 根据客户端跳转 编辑:程序博客网 时间:2024/06/06 01:39
【链接】
poj3321
【题目大意】
给你一颗n个节点的树,树的根节点是1,有两个操作,分别是C x表示如果x节点的权值为1则修正为0,否则修正为1。Q x表示询问以x为根节点的子树的权值。
【解题报告】
直接用DFS序将树转化为区间,然后树状数组搞一下就可以了。
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=100005,maxm=200005;int n,m,Time,tot,lnk[maxn],son[maxm],nxt[maxm],in[maxn],out[maxn];bool vis[maxn];struct BLT{ int c[maxn]; void Clear(){memset(c,0,sizeof(c));} int Lowbit(int x){return x&(-x);} void Add(int x,int da){while (x<=n) c[x]+=da,x+=Lowbit(x);} int Get(int x){int sum=0; while (x) sum+=c[x],x-=Lowbit(x); return sum;}}tr;//树状数组inline int Read(){ int res=0; char ch=getchar(); while (ch<'0'||ch>'9') ch=getchar(); while (ch>='0'&&ch<='9') res=res*10+ch-48,ch=getchar(); return res;}void Dfs(int x,int fa){ in[x]=++Time; for (int j=lnk[x]; j; j=nxt[j]) if (son[j]!=fa) Dfs(son[j],x); out[x]=Time;}void Add_e(int x,int y){ son[++tot]=y; nxt[tot]=lnk[x]; lnk[x]=tot;}int main(){ freopen("3321.in","r",stdin); freopen("3321.out","w",stdout); n=Read(); Time=0; for (int i=1,x,y; i<n; i++) x=Read(),y=Read(),Add_e(x,y),Add_e(y,x); Dfs(1,0); m=Read(); tr.Clear(); for (int i=1; i<=n; i++) tr.Add(i,1); memset(vis,0,sizeof(vis)); for (int i=1; i<=m; i++) { char ch=getchar(); while (ch!='Q'&&ch!='C') ch=getchar(); int x=Read(); if (ch=='Q') printf("%d\n",tr.Get(out[x])-tr.Get(in[x]-1)); else {if (vis[x]) tr.Add(in[x],1); else tr.Add(in[x],-1); vis[x]=1-vis[x];} } return 0;}
阅读全文
0 0
- POJ3321[苹果树]--DFS序+树状数组
- [jzoj1016][poj3321]苹果树(dfs序+树状数组维护)
- POJ3321 dfs序+树状数组
- POJ3321(dfs序+树状数组)
- poj3321 dfs+树状数组
- [POJ3321] Apple Tree 苹果树 - 树状数组
- POJ3321 Apple Tree(DFS序 + 树状数组)
- poj3321-Apple Tree-dfs序+树状数组
- Poj3321 Apple Tree【DFS序】【树状数组】
- 【Codevs1228】苹果树(dfs序+树状数组)
- CodeVS1228 苹果树【DFS序】【树状数组】
- 【树状数组--dfs序转化】poj3321 Apple Tree
- poj3321 树状数组+dfs(时间戳)
- poj3321 Apple Tree(DFS+树状数组)
- 【POJ3321】Apple Tree-DFS+树状数组维护
- poj3321 Apple Tree(树状数组+dfs)
- codevs1228 苹果树(dfs序&&(线段树||树状数组))
- codeves 苹果树 dfs序+树状数组/线段树
- Android开发之线程池使用总结
- UML Designer : A plugin of Eclipse to design UML -- 玩转Eclipse
- android开发相关——github版本控制
- 如何还原eclipse的背景颜色等设置?
- Hbase原理、基本概念、基本架构
- POJ3321[苹果树]--DFS序+树状数组
- 《活法》 -豆瓣评分8.4
- ROS机器人操作系统的安装、配置与初级教程 14
- 洛谷 红魔馆OI 妖梦拼木棒 [组合数学]
- WebStorm 提示快捷键
- ROS机器人操作系统的安装、配置与初级教程 15
- Spark远程调试配置,在IDEA中的配置
- Java中Array与ArrayList的主要区别
- Java对象的访问定位