[bzoj1103][POI2007]大都市meg_dfs序_树状数组
大都市meg bzoj-1103 POI-2007
题目大意:给定一颗n个点的树,m次操作。将一条路的边权更改成0;查询一个点到根节点的点权和。开始的时候所有边的边权都是1。
注释:$1\le n,m\le 2.5\cdot 10^5$。
想法:我们先拉出dfs序。其实严格来讲是出栈入栈序,就是每个点在序上出现两次的那个。
开始的时候入栈时的点权是1,出栈是-1。修改就是把出栈入栈都改成0。然后用树状数组查询前缀和即可。
最后,附上丑陋的代码... ...
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 250010
using namespace std;
int tree[N<<1],val[N<<1],head[N],to[N<<1],nxt[N<<1],tot,cnt;
int dic[N<<1];
struct Node
{
int x,y;
}a[N];
inline int lowbit(int x) {return x&(-x);}
void fix(int x,int delta)
{
for(int i=x;i<=cnt+1;i+=lowbit(i))
{
// puts("fix");
tree[i]+=delta;
}
}
int query(int x)
{
int ans=0;
for(int i=x;i>=1;i-=lowbit(i))
{
// puts("query");
ans+=tree[i];
}
return ans;
}
inline void add(int x,int y)
{
to[++tot]=y;
nxt[tot]=head[x];
head[x]=tot;
}
void dfs(int pos,int fa)
{
// if(a[pos].x) puts("FUCK");
dic[++cnt]=pos;
// cnt++;
val[cnt]=1;
a[pos].x=cnt;
for(int i=head[pos];i;i=nxt[i])
{
if(to[i]==fa) continue;
dfs(to[i],pos);
}
dic[++cnt]=pos;
// cnt++;
val[cnt]=-1;
a[pos].y=cnt;
}
int main()
{
int n; cin >> n ;
int x,y;
for(int i=1;i<n;i++)
{
scanf("%d%d",&x,&y);
add(x,y); add(y,x);
}
dfs(1,0);
val[1]=0;
val[cnt]=0;
for(int i=1;i<=cnt;i++)
{
fix(i,val[i]);
}
// printf("Gun %d\n",cnt);
// for(int i=1;i<=cnt;i++)
// {
// printf("Shit %d\n",dic[i]);
// }
// puts("--------------------------------------");
int m; cin >> m ;
char opt[10];
// for(int i=1;i<=n;i++) printf("%d %d\n",a[i].x,a[i].y);
for(int i=1;i<=n+m-1;i++)
{
// printf("Fuck %d\n",i);
scanf("%s",opt+1);
if(opt[1]=='A')
{
scanf("%d%d",&x,&y);
if(x>y) swap(x,y);
fix(a[y].x,-1);
fix(a[y].y,1);
}
else
{
scanf("%d",&x);
// printf("%d\n",query(3));
printf("%d\n",query(a[x].x));
}
}
return 0;
}
小结:简单题。
[bzoj1103][POI2007]大都市meg_dfs序_树状数组的更多相关文章
- [poj3321]Apple Tree_dfs序_树状数组
Apple Tree poj-3321 题目大意:给你一个根固定的树,每一个点的点权是0或1,查询子树点权和. 注释:$1\le n \le 10^5$. 想法:刚刚学习dfs序,刷到水题偶哈哈. 什 ...
- BZOJ_5055_膜法师_树状数组+离散化
BZOJ_5055_膜法师_树状数组+离散化 Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇宙的膜法师,想偷取其中的三个维度为伟大的长者续秒, 显然 ...
- BZOJ_3653_谈笑风生_树状数组
BZOJ_3653_谈笑风生_树状数组 Description 设T 为一棵有根树,我们做如下的定义: ? 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称“a比b不知道 高明到哪里去了”. ...
- BZOJ_2141_排队_树状数组+分块
BZOJ2141_排队_树状数组+分块 Description 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家 乐和和.红星幼儿园的小朋友们排起了 ...
- BZOJ 2819: Nim dfs序维护树状数组,倍增
1.随机选两个堆v,u,询问若在v到u间的路径上的石子堆中玩Nim游戏,是否有必胜策略,如果有,vfleaking将会考虑将这些石子堆作为初始局面之一,用来坑玩家.2.把堆v中的石子数变为k. 分析: ...
- BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树
BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排 ...
- BZOJ_3132_上帝造题的七分钟_树状数组
BZOJ_3132_上帝造题的七分钟_树状数组 Description “第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a,b), ...
- BZOJ 4999: This Problem Is Too Simple! DFS序+LCA+树状数组+离线
Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) , ...
- 【BZOJ1103】大都市meg(DFS序,树状数组)
题意:有一颗树,1号点为根,保证编号小的点深度较小,初始状态每条边都没有被标记,要求实现两个操作在线: A:将连接x,y的边标记 W:查询从1到x的路径上有多少条边未被标记 n<=2*10^5 ...
随机推荐
- css - 所有的a标签设置为新窗口打开
前言 由于工作的需要,需要把某个页面下的所有a标签都设置为新开新窗口,即:<a href="XXX">增加target:<a href="XXX&quo ...
- [Apple开发者帐户帮助]七、注册设备(1)注册一个设备
您需要已注册的设备来创建开发或临时配置文件.要使用开发人员帐户注册设备,您需要拥有设备名称和设备ID. 注意:如果您使用自动签名,Xcode会为您注册连接的设备.Xcode Server也可以配置为注 ...
- 解决Sublime Text 3 的 Package Control 启动失败问题
今天在使用Sublime Text的时候,需要了这样的情况 遇到这个问题的时候 我是这样解决的 一. 首先 找到 Package Control的下载地址1 下载地址2.将下载下 ...
- RHEL6.5安装QT5.4,设置环境变量
qt5.4.run在[/home/share]目录下 vim ~/.bashrcexport PATH=/opt/oracle/Qt5.4.1/Tools/QtCreator/bin:/opt/ora ...
- 《Typecript 入门教程》 3、接口
转载:<TypeScript 中文入门教程> 3.接口 介绍 TypeScript的核心原则之一是对值所具有的shape进行类型检查. 它有时被称做“鸭式辨型法”或“结构性子类型化”. 在 ...
- NOIP真题汇总
想想在NOIP前总得做做真题吧,于是长达一个月的刷题开始了 涉及2008-2016年大部分题目 NOIP [2008] 4/4 1.传纸条:清真的三维DP 2.笨小猴:字符串模拟 3.火柴棒等式:打表 ...
- Fckeditor使用方法
下载地址 http://ckeditor.com/download <?php require('../fckeditor/fckeditor.php'); ?> <html> ...
- Python中的Map/Reduce
MapReduce是一种函数式编程模型,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数 ...
- phpstorm如何在同一个文件夹打开多个目录
phpstorm默认一个窗口只显示一个项目,如果新建一个项目,他会给你个选项卡,问你是在新窗口打开新项目还是在本窗口打开. 能不能在一个窗口打开多个项目呢?就像sublime text那样,其实是可以 ...
- 图解TCP/IP笔记(2)——数据链路
[转载请注明]https://www.cnblogs.com/igoslly/p/9396066.html ——终端节点之间的包传递 MAC寻址(物理寻址).介质共享.非公有网络.分组交换.环路检测. ...