欢迎访问~原文出处——博客园-zhouzhendong

去博客园看该题解


题目传送门 - BZOJ1103


题意概括

  一棵树上,一开始所有的边权值为1,我们要支持两种操作:

  1. 修改某一条边的权值为0

  2. 询问根节点到某一节点的路径权值和


题解

  前置技能 - dfs序相关

  然后差不多你就会了。

  dfs序+线段树搞定了。


代码

#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
const int N=+;
struct Gragh{
int cnt,x[N],y[N],nxt[N],fst[N];
void set(){
cnt=;
memset(fst,,sizeof fst);
}
void add(int a,int b){
x[++cnt]=a,y[cnt]=b;
nxt[cnt]=fst[a],fst[a]=cnt;
}
}g;
int n,m,fa[N],in[N],out[N],dis[N],time;
char ch[];
struct SegTree{
int v,add;
}t[N*];
void dfs(int rt){
in[rt]=++time;
for (int i=g.fst[rt];i;i=g.nxt[i])
dis[g.y[i]]=dis[rt]+,dfs(g.y[i]);
out[rt]=time;
}
void build(int rt,int le,int ri){
t[rt].add=t[rt].v=;
if (le==ri)
return;
int mid=(le+ri)>>,ls=rt<<,rs=ls|;
build(ls,le,mid);
build(rs,mid+,ri);
}
void pushdown(int rt){
if (!t[rt].add)
return;
int ls=rt<<,rs=ls|,&v=t[rt].add;
t[ls].add+=v,t[ls].v+=v;
t[rs].add+=v,t[rs].v+=v;
v=;
}
void update(int rt,int le,int ri,int xle,int xri){
if (ri<xle||le>xri)
return;
if (xle<=le&&ri<=xri){
t[rt].add++,t[rt].v++;
return;
}
pushdown(rt);
int mid=(le+ri)>>,ls=rt<<,rs=ls|;
update(ls,le,mid,xle,xri);
update(rs,mid+,ri,xle,xri);
}
int query(int rt,int le,int ri,int x){
if (le==ri)
return t[rt].v;
pushdown(rt);
int mid=(le+ri)>>,ls=rt<<,rs=ls|;
if (x<=mid)
return query(ls,le,mid,x);
else
return query(rs,mid+,ri,x);
}
int main(){
g.set();
scanf("%d",&n);
for (int i=,a,b;i<n;i++){
scanf("%d%d",&a,&b);
if (a>b)
swap(a,b);
fa[b]=a,g.add(a,b);
}
time=dis[]=;
dfs();
build(,,n);
scanf("%d",&m);
m+=n-;
while (m--){
int x,a,b;
scanf("%s",ch);
if (ch[]=='W'){
scanf("%d",&x);
printf("%d\n",dis[x]-query(,,n,in[x]));
}
else {
scanf("%d%d",&a,&b);
if (a>b)
swap(a,b);
update(,,n,in[b],out[b]);
}
}
return ;
}

BZOJ1103 [POI2007]大都市meg dfs序 线段树的更多相关文章

  1. [BZOJ1103][POI2007]大都市meg dfs序+树状数组

    Description 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了.不过,她经常回忆起以前在乡间漫步的情景.昔日,乡下有依次编号为1..n ...

  2. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

  3. bzoj1103: [POI2007]大都市meg

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1103 题目大意:在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Ma ...

  4. Educational Codeforces Round 6 E dfs序+线段树

    题意:给出一颗有根树的构造和一开始每个点的颜色 有两种操作 1 : 给定点的子树群体涂色 2 : 求给定点的子树中有多少种颜色 比较容易想到dfs序+线段树去做 dfs序是很久以前看的bilibili ...

  5. 【BZOJ-3252】攻略 DFS序 + 线段树 + 贪心

    3252: 攻略 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 339  Solved: 130[Submit][Status][Discuss] D ...

  6. Codeforces 343D Water Tree(DFS序 + 线段树)

    题目大概说给一棵树,进行以下3个操作:把某结点为根的子树中各个结点值设为1.把某结点以及其各个祖先值设为0.询问某结点的值. 对于第一个操作就是经典的DFS序+线段树了.而对于第二个操作,考虑再维护一 ...

  7. BZOJ2434 [Noi2011]阿狸的打字机(AC自动机 + fail树 + DFS序 + 线段树)

    题目这么说的: 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母.经阿狸研究发现,这个打字机是这样工作的: 输入小 ...

  8. POJ 3321 DFS序+线段树

    单点修改树中某个节点,查询子树的性质.DFS序 子树序列一定在父节点的DFS序列之内,所以可以用线段树维护. 1: /* 2: DFS序 +线段树 3: */ 4:   5: #include < ...

  9. 【XSY2667】摧毁图状树 贪心 堆 DFS序 线段树

    题目大意 给你一棵有根树,有\(n\)个点.还有一个参数\(k\).你每次要删除一条长度为\(k\)(\(k\)个点)的祖先-后代链,问你最少几次删完.现在有\(q\)个询问,每次给你一个\(k\), ...

随机推荐

  1. 嵌入式iframe子页面与父页面js通信方式

    iframe框架中的页面与主页面之间的通信方式根据iframe中src属性是同域链接还是跨域链接,有明显不同的通信方式,同域下的数据交换和DOM元素互访就简单的多了,而跨域的则需要一些巧妙的方式来实现 ...

  2. Nginx 防盗链配置

    防盗链一般都是流媒体配置 location ~* \.(jpg|jpeg|png|bmg|swf|mp4|mp4|mmf|zip|rar|swf|flv)$ { // 对jpg|jpeg|png|bm ...

  3. 滑动条QSlider

    QSlider只提供整数范围 滑块接受Tab键的焦点,并同时提供了一个鼠标滚轮和键盘接口.键盘接口如下: Left/Right 移动水平滑块一个步长.Up/Down 移动垂直滑块一个步长.PageUp ...

  4. 20165230田坤烨《网络对抗》Exp1 PC平台逆向破解

    实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShe ...

  5. CrossUI SPA Builder ---- feathers API框架

    CrossUI SPA Builder:   http://www.crossui.com/ 国产?   龙博(JSLINB)AJAX框架? CrossUI SPA Builderenables de ...

  6. VC++文件拖放

    属性Accept Files 设置True,消息WM_DROPFILES 设置事件OnDropFiles void CNWiReworkDlg::OnDropFiles(HDROP hDropInfo ...

  7. KVM -> 虚拟机磁盘管理_03

    1.KVM磁盘管理 1.KVM qcow2.raw.vmdk等镜像格式说明:http://blog.csdn.net/zhengmx100/article/details/53887162 raw: ...

  8. Springboot分模块开发详解(1):建立父工程

    基础服务,见下: base是父工程,base-entity是实体层,base-dao是DAO层,base-service是业务层,base-controller是WEB控制器层,base-web是页面 ...

  9. gitlab代码仓库迁移

    有的时候我们需要对gitlab上的代码进行迁移,希望在迁移后能保持原有的branch.tag.commit记录等.可以使用以下方式: 1.clone代码到本地. 2.修改remote仓库的地址,添加新 ...

  10. xshell xftp免费版下载方法

    第一步:进入官网 https://www.netsarang.com/ 第二步:选中Free License 第三步:选中你要下的xftp或者xsell (l两个好像不能一块下,都要单独操作) 第四步 ...