BZOJ 1103 [POI2007]大都市meg(树状数组+dfs序)
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=1103
【题目大意】
给出一棵树,每条边的经过代价为1,现在告诉你有些路不需要代价了, 以A x y形式给出,表示x到y的路不再需要代价,同时还有查询操作W x, 查询1到x的路径需要多少代价。
【题解】
我们对树做一遍dfs,保存得到的dfs序,我们发现如果对dfs序列进行操作,
对同一个点在进入位置设置1,出点位置设置-1, 那么查询1到x的代价就是dfs序到x入点位置的前缀和。 而对于取消代价的操作只要在出点位置+1,进入位置-1即可。
单点修改,前缀查询可以用树状数组维护。
【代码】
#include <cstdio>
#include <vector>
using namespace std;
const int N=500005;
int x,y,T,n,m,top,c[N],st[N],f[N],l[N],r[N];
vector<int> v[N];
char op[10];
void update(int x,int val){while(x<=n+n)c[x]+=val,x+=x&-x;}
int query(int x){int res=-1;while(x)res+=c[x],x-=x&-x;return res;}
void dfs(){
st[++top]=1;
while(top){
int x=st[top],fx=f[top--];
if(!l[x]){
l[x]=++T;
st[++top]=x;
for(int i=0;i<v[x].size();i++){
if(v[x][i]==fx)continue;
st[++top]=v[x][i];
f[top]=x;
}
}else r[x]=++T;
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<n;i++){
scanf("%d%d",&x,&y);
v[x].push_back(y);
v[y].push_back(x);
}dfs();
for(int i=1;i<=n;i++){update(l[i],1);update(r[i],-1);}
scanf("%d",&m);
for(int i=1;i<n+m;i++){
scanf("%s",op);
if(op[0]=='A'){
scanf("%d%d",&x,&y);
update(l[y],-1);update(r[y],1);
}else{
scanf("%d",&x);
printf("%d\n",query(l[x]));
}
}return 0;
}
BZOJ 1103 [POI2007]大都市meg(树状数组+dfs序)的更多相关文章
- [bzoj1103][POI2007]大都市meg(树状数组+dfs序)
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2031 Solved: 1069[Submit][Sta ...
- 【BZOJ-1103】大都市meg 树状数组 + DFS序
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2009 Solved: 1056[Submit][Sta ...
- BZOJ 1103: [POI2007]大都市meg( 树链剖分 )
早上数学考挂了...欲哭无泪啊下午去写半个小时政治然后就又可以来刷题了.. 树链剖分 , 为什么跑得这么慢... ------------------------------------------- ...
- bzoj 1103 : [POI2007]大都市meg (树链剖分+线段树)
Description 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了.不过,她经常回忆起以前在乡间漫步的情景.昔日,乡下有依次编号为1..n ...
- 【BZOJ】2434: [Noi2011]阿狸的打字机 AC自动机+树状数组+DFS序
[题意]阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的: l 输入小写 ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
- 数据结构(线段树):BZOJ 1103 [POI2007]大都市meg
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1791 Solved: 925[Submit][Stat ...
- BZOJ 1103: [POI2007]大都市meg
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2189 Solved: 1160[Submit][Sta ...
- BZOJ 1103: [POI2007]大都市meg(dfs序,树状数组)
本来还想链剖的,结果才发现能直接树状数组的= = 记录遍历到达点与退出点的时间,然后一开始每个到达时间+1,退出时间-1,置为公路就-1,+1,询问直接点1到该点到达时间求和就行了- - CODE: ...
随机推荐
- sql防注入代码
function defend_sql($string, $force = 1) { $preg = "select|insert|and|or|update|delete|\'|\/\*| ...
- leetcode Linked List Cycle python
# Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # self.val = ...
- Ubuntu安装Mysql及使用
(1)在线安装:sudo apt-get install mysql-server(2)管理mysql: sudo /etc/init.d/mysql start===========>开启my ...
- STL源码剖析 迭代器(iterator)概念与编程技法(三)
1 STL迭代器原理 1.1 迭代器(iterator)是一中检查容器内元素并遍历元素的数据类型,STL设计的精髓在于,把容器(Containers)和算法(Algorithms)分开,而迭代器(i ...
- Docker基本概念填坑
Docker的基本概念填坑 Docker的基本概念填坑 1. Docker的基本组成 Docker Client客户端 Docker Daemon守护进程 Docker Image镜像 Docker ...
- mac apktool配置
Apktool:http://ibotpeaches.github.io/Apktool/install/ 最新版本2.0.1 dex2jar: https://github.com/pxb1988/ ...
- Yaf-Plus 我们只谈框架这件事
预热下,也算对自己的督促. Comming soon!
- OA项目之打印
打印 若此页有一个打印按钮: <input type="button" id="btnPrint" class="button_sm7" ...
- 编辑器sublime text 加入到右键菜单
方式一: 1. 运行中输入 regedit 打开注册表 2. 在HKEY_CLASSES_ROOT/*/shell/ 下新建’项’ ,名称自己觉得.我用的是Sublime Text 3 ...
- zoj 3665 Yukari's Birthday(枚举+二分)
Yukari's Birthday Time Limit: 2 Seconds Memory Limit: 32768 KB Today is Yukari's n-th birthday ...