博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3321 Apple Tree DFS序+fenwick
阅读量:5889 次
发布时间:2019-06-19

本文共 1565 字,大约阅读时间需要 5 分钟。

题目大意:有一颗长满苹果的苹果树,有两个操作。

1.询问以一个点为根的子树中有多少个苹果。

2.看看一个点有没有苹果,假设没有苹果。那么那里就立即长出一个苹果(= =!);否则就把那个苹果摘下来。

思路:进行一次深搜,将每一个节点最開始出现的时间和最后出现的时间记在一个数组里,那么这两点之间的点就是它以及它的子树的二倍,然后就用树状数组来维护区间和即可了。

CODE:

#include 
#include
#include
#include
#define MAX 200010using namespace std;pair
pos[MAX];int points,asks;int head[MAX],total;int next[MAX << 1],aim[MAX << 1];int cnt;bool src[MAX];int fenwick[MAX];char c[10];inline void Add(int x,int y);void DFS(int x,int last);inline void Fix(int x,int c);inline int GetSum(int x);int main(){ cin >> points; for(int x,y,i = 1;i < points; ++i) { scanf("%d%d",&x,&y); Add(x,y),Add(y,x); } DFS(1,-1); memset(src,true,sizeof(src)); for(int i = 1;i <= points; ++i) Fix(pos[i].first,1),Fix(pos[i].second,1); cin >> asks; for(int x,i = 1;i <= asks; ++i) { scanf("%s%d",c,&x); if(c[0] == 'Q') printf("%d\n",(GetSum(pos[x].second) - GetSum(pos[x].first - 1)) >> 1); else { if(src[x]) { Fix(pos[x].first,-1); Fix(pos[x].second,-1); src[x] = false; } else { Fix(pos[x].first,1); Fix(pos[x].second,1); src[x] = true; } } } return 0;}inline void Add(int x,int y){ next[++total] = head[x]; aim[total] = y; head[x] = total;}void DFS(int x,int last){ pos[x].first = ++cnt; for(int i = head[x];i;i = next[i]) { if(aim[i] == last) continue; DFS(aim[i],x); } pos[x].second = ++cnt;}inline void Fix(int x,int c){ for(;x <= (points << 1);x += x&-x) fenwick[x] += c;}inline int GetSum(int x){ int re = 0; for(;x;x -= x&-x) re += fenwick[x]; return re;}

转载地址:http://tqysx.baihongyu.com/

你可能感兴趣的文章
[转载]jQuery上传插件Uploadify使用详解
查看>>
算法学习的轨迹(转)
查看>>
asmx-web-service-basic-authentication
查看>>
Excel转换成图片的操作方法
查看>>
MFC中读取和设置文件状态
查看>>
分页显示
查看>>
iOS中安全结束 子线程 的方法
查看>>
批处理学习笔记8 - 深入学习For命令1
查看>>
Object-c学习之路二(oc内存管理黄金法则1)
查看>>
python开发_python文件操作
查看>>
iPhone 已停用
查看>>
CSS3之边框图片border-image
查看>>
图片轮换cycle插件的运用
查看>>
【Oracle】两个表Join关联更新
查看>>
ActiveX控件的安全初始化和脚本操作 和 数字签名SIGN
查看>>
Eclipse console文本换行
查看>>
微信支付开发(11) Native支付
查看>>
HDFS dfsclient写文件过程 源码分析
查看>>
【设计模式】—— 代理模式Proxy
查看>>
ejabberd
查看>>