图论:DFS序
DFS序可以把树转到区间上再用高级数据结构维护,比树链剖分好理解很多
一个闭区间就是一棵子树
POJ3321
- #include<cstdio>
- const int maxn=;
- const int maxm=;
- int n,m,id,cnt;
- int g[maxn],q[maxn],st[maxn],ed[maxn];
- int lch[],rch[],sum[];
- struct Edge
- {
- int t,next;
- }e[maxm];
- void insert(int u,int v)
- {
- ++cnt;e[cnt].t=v;e[cnt].next=g[u];g[u]=cnt;
- ++cnt;e[cnt].t=u;e[cnt].next=g[v];g[v]=cnt;
- }
- void dfs(int x,int fa)
- {
- q[++id]=x;
- st[x]=id;
- for(int tmp=g[x];tmp;tmp=e[tmp].next)
- if(e[tmp].t!=fa) dfs(e[tmp].t,x);
- ed[x]=id;
- }
- void build(int k,int l,int r)
- {
- int mid=(l+r)>>;
- lch[k]=l;rch[k]=r;
- if(l==r)
- {
- sum[k]=;
- return;
- }
- build(k<<,l,mid);
- build(k<<|,mid+,r);
- sum[k]=sum[k<<]+sum[k<<|];
- }
- int query(int k,int a,int b)
- {
- int l=lch[k],r=rch[k],mid=(l+r)>>;
- if(l==a&&r==b) return sum[k];
- if(b<=mid) return query(k<<,a,b);
- else if(a>mid) return query(k<<|,a,b);
- else return query(k<<,a,mid)+query(k<<|,mid+,b);
- }
- void modify(int k,int x)
- {
- int l=lch[k],r=rch[k],mid=(l+r)>>;
- if(l==r)
- {
- sum[k]^=;
- return;
- }
- if(x<=mid) modify(k<<,x);
- else modify(k<<|,x);
- sum[k]=sum[k<<]+sum[k<<|];
- }
- long long read()
- {
- long long x=,f=;char ch=getchar();
- while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
- while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
- return x*f;
- }
- int main()
- {
- n=read();
- for(int i=;i<n;i++)
- {
- int u=read(),v=read();
- insert(u,v);
- }
- dfs(,);
- m=read();
- char ch[];
- build(,,n);
- for(int i=;i<=m;i++)
- {
- scanf("%s",ch+);
- int x=read();
- if(ch[]=='Q') printf("%d\n",query(,st[x],ed[x]));
- else modify(,st[x]);
- }
- return ;
- }
图论:DFS序的更多相关文章
- 2018.11.01 NOIP训练 图论(线段树+倍增+dfs序)
传送门 一道挺妙的题. 对于询问点(u,v),如右图所示,我们可以发现存在一个点m在u->v的路径中,m子树的点到u是最近的,m子树外到v是最近的.其中dis(u,m)=(dis(u,v)-1) ...
- 图论——Tarjan 初步 DFS序+时间戳+欧拉序
一.什么是DFS序: DFS序是按照先序遍历,先遍历根节点然后依次遍历左子树,右子树的过程,每次遇到新的节点就把新访问节点加到序列中,代码如下: int DFSrk[100000]; int cnt= ...
- BZOJ 3083: 遥远的国度 dfs序,树链剖分,倍增
今天再做一天树的题目,明天要开始专攻图论了.做图论十几天之后再把字符串搞搞,区域赛前再把计几看看. 3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 128 ...
- [luogu P3787][新创无际夏日公开赛] 冰精冻西瓜 [树状数组][dfs序]
题目背景 盛夏,冰之妖精琪露诺发现了一大片西瓜地,终于可以吃到美味的冻西瓜啦. 题目描述 琪露诺是拥有操纵冷气程度的能力的妖精,一天她发现了一片西瓜地.这里有n个西瓜,由n-1条西瓜蔓连接,形成一个有 ...
- BZOJ3772 精神污染 【主席树 + dfs序】
题目 兵库县位于日本列岛的中央位置,北临日本海,南面濑户内海直通太平洋,中央部位是森林和山地,与拥有关西机场的大阪府比邻而居,是关西地区面积最大的县,是集经济和文化于一体的一大地区,是日本西部门户,海 ...
- bzoj 3772 精神污染 主席树+dfs序
精神污染 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 637 Solved: 177[Submit][Status][Discuss] Descri ...
- 树链剖分(附带LCA和换根)——基于dfs序的树上优化
.... 有点懒: 需要先理解几个概念: 1. LCA 2. 线段树(熟练,要不代码能调一天) 3. 图论的基本知识(dfs序的性质) 这大概就好了: 定义: 1.重儿子:一个点所连点树size最大的 ...
- BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]
3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 1280 MBSubmit: 3127 Solved: 795[Submit][Status][Discu ...
- BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]
4196: [Noi2015]软件包管理器 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1352 Solved: 780[Submit][Stat ...
随机推荐
- 冲刺阶段站立会议每日任务i4
昨天对小组成员的任务进行了进一步细化分配,今天了解了安卓开发环境的相关知识. 遇到的问题: 没有遇到问题.
- 【acm】杀人游戏(hdu2211)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2211 杀人游戏 Time Limit: 3000/1000 MS (Java/Others) M ...
- 【Quartz.Net】.net 下使用Quartz.Net
Quartz.net是作业调度框架 1. 项目中添加quartz.net的引用(这里使用nuget管理) 新建一个类TimingJob,该类主要用于实现任务逻辑 using Quartz; usi ...
- 【Java】接口开发中关于接受和发送json的相关范例
接受json package com.suneee.scn.wms.web.rocketmq; import java.util.List; import net.sf.json.JSONArray; ...
- Redis windows环境安装 以及 redis整合spring
Redis对于Linux是官方支持的,安装和使用没有什么好说的,普通使用按照官方指导,5分钟以内就能搞定.详情请参考: http://redis.io/download Redis官方是不支持wind ...
- Shell脚本修改Nginx upstream配置文件
#!/bin/bash ##################################################### # Name: change_nginx_upstream_conf ...
- P1065 作业调度方案
题目描述 我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成.每个工件的每道工序都有指定的加工时间. 每个工件的每个工序称为一个操作,我们用记号j−k表示一个 ...
- TCP的拥塞控制 (四)
TCP NewReno NewReno是在Reno的基础上,改进了Fast Recovery,主要思想是保证处于network中的packet的总量是饱和的. 在Reno算法中,一个超时会导致相 ...
- 常州day5
Task 1 小 W 和小 M 一起玩拼图游戏啦~ 小 M 给小 M 一张 N 个点的图,有 M 条可选无向边,每条边有一个甜蜜值,小 W 要选 K条边,使得任意两点间最多有一条路径,并且选择的 K条 ...
- Rearrangement inequality
摘抄自: https://en.wikipedia.org/wiki/Rearrangement_inequality#Proof In mathematics, the rearrangement ...