bzoj 3631 松鼠的新家 (树链剖分)
链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3631
思路:
直接用树链剖分求每一次运动,因为这道题只需要区间增添,单点求值,没必要用线段树,直接数组标记下就好了
实现代码
- #include<bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define lson l,m,rt<<1
- #define rson m+1,r,rt<<1|1
- #define mid int m = (l + r) >> 1
- const int M = 1e5 + ;
- int cnt,cnt1;
- int head[M],dep[M],fa[M],top[M],son[M],siz[M],tid[M],sum[M],a[M];
- struct node{
- int to,next;
- }e[M];
- void add(int u,int v){
- e[++cnt].to = v;e[cnt].next = head[u];head[u] = cnt;
- }
- void dfs1(int u,int faz,int deep){
- dep[u] = deep;
- fa[u] = faz;
- siz[u] = ;
- for(int i = head[u];i;i=e[i].next){
- int v = e[i].to;
- if(v == fa[u]) continue;
- dfs1(v,u,deep+);
- siz[u] += siz[v];
- if(siz[v] > siz[son[u]]||son[u] == -)
- son[u] = v;
- }
- }
- void dfs2(int u,int t){
- top[u] = t;
- tid[u] = ++cnt1;
- if(son[u] == -) return ;
- dfs2(son[u],t);
- for(int i = head[u];i;i=e[i].next){
- int v = e[i].to;
- if(v != fa[u]&&v != son[u])
- dfs2(v,v);
- }
- }
- void update(int x,int y){
- sum[x]++;
- sum[y+]--;
- }
- void solve(int x,int y){
- int fx = top[x],fy = top[y];
- int ans = ;
- while(fx!=fy){
- if(dep[fx] < dep[fy]) swap(x,y),swap(fx,fy);
- update(tid[fx],tid[x]);
- x = fa[fx]; fx = top[x];
- }
- if(dep[x] > dep[y]) swap(x,y);
- update(tid[x],tid[y]);
- }
- int main(){
- int n,x,y;
- scanf("%d",&n);
- memset(son,-,sizeof(son));
- for(int i = ;i <= n;i ++){
- scanf("%d",&a[i]);
- }
- int n1 = n-;
- while(n1--){
- scanf("%d%d",&x,&y);
- add(x,y); add(y,x);
- }
- dfs1(,,); dfs2(,);
- for(int i = ;i <= n;i ++)
- solve(a[i-],a[i]);
- for(int i = ;i <= n;i ++){
- sum[i] += sum[i-];
- }
- // cout<<<<endl;
- for(int i = ;i <= n;i ++){
- if(i == ) printf("%d\n",sum[tid[i]]);
- else printf("%d\n",sum[tid[i]]-);
- }
- return ;
- }
bzoj 3631 松鼠的新家 (树链剖分)的更多相关文章
- BZOJ - 3631 松鼠的新家 (树链剖分)
题目链接 树链剖分基础题,路径权值修改+差分 #include<bits/stdc++.h> using namespace std; typedef long long ll; ; in ...
- BZOJ 3631 松鼠的新家 - 树链剖分 / 树上差分
传送门 分析: 树链剖分:x->y,将x到y的路径加一,并将x端点的答案-1,最后统计答案. 树上差分:x->y,x+1,y+1,lca-1,fa[lca]-1,并将x打上标记,最后统计前 ...
- BZOJ 3631: [JLOI2014]松鼠的新家( 树链剖分 )
裸树链剖分... ------------------------------------------------------------------- #include<bits/stdc++ ...
- Bzoj 3631: [JLOI2014]松鼠的新家(树链剖分+线段树)
3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec Memory Limit: 128 MB Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个 ...
- 洛谷 P3258 [JLOI2014]松鼠的新家(树链剖分)
题目描述松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在”树“上. 松鼠想邀请小熊维尼前来 ...
- BZOJ3631 松鼠的新家(树链剖分)
题目链接 松鼠的新家 差不多可以说是树链剖分的模板题了,直接维护即可. #include <bits/stdc++.h> using namespace std; #define REP( ...
- 【BZOJ3631】松鼠的新家 树链剖分
BZOJ3631 松鼠的新家 Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他 ...
- P3285 松鼠的新家 (树链剖分)
题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在”树“上. 松鼠想邀请小熊维尼前 ...
- P3258 [JLOI2014]松鼠的新家 树链剖分
这个题就是一道树剖板子题,就是每走一步就把所有的经过点加一就行了.还有,我的树剖板子没问题!!!谁知道为什么板子T3个点!我不管了!反正这道题正常写A了. 题干: 题目描述 松鼠的新家是一棵树,前几天 ...
- 洛谷 P3258 [JLOI2014]松鼠的新家 树链剖分+差分前缀和优化
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例: 输出样例: 说明 说明 思路 AC代码 优化 优化后AC代码 总结 题面 题目链接 P3258 [JLOI2 ...
随机推荐
- Centos 7 修改系统时区
timedatectl status Local time: 四 2014-12-25 10:52:10 CST Universal time: 四 2014-12-25 02:52:10 UTC R ...
- itoa函数实现
1. 整数字符转化为字符串数 // 将整数转换成字符串数,不用函数itoa // 思路:采用加'0',然后在逆序的方法 #include <iostream> using nam ...
- Python-常见面试题-持续更新
1.请你简要介绍一下Python的生成器是什么 答:Python生成器是一个返回可以迭代对象的函数,可以被用作控制循环的迭代行为. 生成器类似于返回值为数组的一个函数,这个函数可以接受参数,可以被调用 ...
- Elasticsearch - 简单介绍
Elasticsearch 简介 1. 什么是 Elasticsearch ElasticSearch 是一个基于 Lucene 的搜索服务器. 它了一个分布式多 用户能力的全文搜索引擎,能够达到实时 ...
- Form的is_valid校验规则及验证顺序
一.验证顺序 查看form下的源码了解顺序 BaseForm为基类,中间包含了is_valid校验方法 @html_safe class BaseForm: ......... self.is_b ...
- CRM系统(第二部分)
阅读目录 一.讲师与学生简介 二. 初始化 ,studyrecord, 三.初始化 course_record:批量生成学习记录 四. 考勤 url跳转 五.录入成绩 六.highcharts表 ...
- Pair Project
以前只是一个人完成一个项目,不论什么都是,现在突然要两个人一起来写, 听上去挺稀奇的,也挺简单的,可惜了就是“听上去”而已.我认为这也是一种技术啊~ 我跟我的搭档研究了好久好久,选择了好久,然后也选了 ...
- [学习]UX 测试 5S 范围
最近被UX测试搞的死去活来的 郁闷坏了. 豆瓣上面有一个介绍: 好的框架总是简洁的. Strategy - Scope - Structure - Skeleton - Surface五个层面,用bo ...
- 日期选择器date、week、time、datetime、datetime-local类型
下面只写两个类型的代码案例,其他都大同小异 date类型: <!DOCTYPE html> <html> <head> <meta charset=" ...
- day 7-16 单表查询
一.准备工作 先把表建立好,方便一会查询. create table emp( id int not null unique auto_increment, name varchar(20) not ...