3631. [JLOI2014]松鼠的新家【树形DP】
Description
Input
Output
Sample Input
1 4 5 3 2
1 2
2 4
2 3
4 5
Sample Output
2
1
2
1
HINT
2<= n <=300000
可能连树形DP都不算……
就一个裸的前缀和,竟然还是紫题(逃)
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #define N (300000+100) 5 using namespace std; 6 7 struct node 8 { 9 int to,next; 10 }edge[N*2]; 11 int Father[N],a[N],Depth[N],f[N][21]; 12 int head[N],num_edge,n,sum[N]; 13 14 void add(int u,int v) 15 { 16 edge[++num_edge].to=v; 17 edge[num_edge].next=head[u]; 18 head[u]=num_edge; 19 } 20 21 void Dfs(int x) 22 { 23 Depth[x]=Depth[Father[x]]+1; 24 for (int i=head[x];i!=0;i=edge[i].next) 25 if (edge[i].to!=Father[x]) 26 { 27 Father[edge[i].to]=x; 28 f[edge[i].to][0]=x; 29 Dfs(edge[i].to); 30 sum[x]+=sum[edge[i].to]; 31 } 32 } 33 34 int LCA(int x,int y) 35 { 36 if (Depth[x]<Depth[y]) swap(x,y); 37 for (int i=19;i>=0;--i) 38 if (Depth[f[x][i]]>=Depth[y]) 39 x=f[x][i]; 40 if (x==y) return x; 41 for (int i=19;i>=0;--i) 42 if (f[x][i]!=f[y][i]) 43 { 44 x=f[x][i]; 45 y=f[y][i]; 46 } 47 return Father[x]; 48 } 49 50 int main() 51 { 52 int x,y; 53 scanf("%d",&n); 54 for (int i=1;i<=n;++i) 55 scanf("%d",&a[i]); 56 for (int i=1;i<=n-1;++i) 57 { 58 scanf("%d%d",&x,&y); 59 add(x,y); add(y,x); 60 } 61 Dfs(1); 62 for (int i=1;i<=19;++i) 63 for (int j=1;j<=n;++j) 64 f[j][i]=f[f[j][i-1]][i-1]; 65 for (int i=1;i<=n-1;++i) 66 { 67 x=a[i],y=a[i+1]; 68 int lca=LCA(x,y); 69 sum[x]++;sum[y]++; 70 sum[lca]--;sum[Father[lca]]--; 71 } 72 Dfs(1); 73 for (int i=2;i<=n;++i) 74 sum[a[i]]--; 75 for (int i=1;i<=n;++i) 76 printf("%d\n",sum[i]); 77 }
转载于:https://www.cnblogs.com/refun/p/8680800.html
3631. [JLOI2014]松鼠的新家【树形DP】相关推荐
- bzoj 3631: [JLOI2014]松鼠的新家(LCA+树上差分)
3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2059 Solved: 1030 [Submit][S ...
- 3631: [JLOI2014]松鼠的新家
3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 707 Solved: 342 [Submit][Sta ...
- bzoj 3631 [JLOI2014]松鼠的新家
题目 传送门 题解 看到某Yuta的树总结觉得LCA+树上差分挺好写而且差分没写过准备水一发结果水了一上午qwq.因为第一次写树上差分和树剖求LCA,结果树剖版子某处打错了..(而且差分点和差分边还是 ...
- 【BZOJ 3631】 [JLOI2014]松鼠的新家
3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 681 Solved: 329 [Submit][Statu ...
- [Luogu 3258] JLOI2014 松鼠的新家
[Luogu 3258] JLOI2014 松鼠的新家 LCA + 树上差分. 我呢,因为是树剖求的 LCA,预处理了 DFN(DFS 序),于是简化成了序列差分. qwq不讲了不讲了,贴代码. #i ...
- P3258 [JLOI2014]松鼠的新家
文章目录 题意: 题解: 树上差分 代码: 树链剖分 代码: P3258 [JLOI2014]松鼠的新家 题意: n个点,n-1条边,给出每个点的拜访顺序,问每个点经过几次(最后一次移动不算拜访) 题 ...
- 洛谷 P3258 [JLOI2014]松鼠的新家 解题报告
P3258 [JLOI2014]松鼠的新家 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他 ...
- 洛谷 P3258 [JLOI2014]松鼠的新家 树上差分
缘起 [1]中我们学习了树上差分,并且a了一个裸的点差分. 现在继续树上差分~ 洛谷 P3258 [JLOI2014]松鼠的新家 分析 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房 ...
- P3258[JLOI2014]松鼠的新家(LCA 树上差分)
P3258 [JLOI2014]松鼠的新家 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他 ...
最新文章
- LeetCode Palindrome Linked List
- C语言中 if 和 else if 的区别
- Java最大公共子串(动态规划)
- TUST 数据库原理 试卷(A)
- 一只紧握笔的手:地震中的感人图片之二
- Unix/Linux环境C编程入门教程(16) LinuxMint CCPP开发环境搭建
- Android屏幕计算正方形,Android Camera 正方形预览(二)
- black-box优化——第二篇:直接搜索算法
- 15-1 并发版爬虫架构
- web打印组件康虎云报表与odoo整合示例
- STM32F205VCT6主控PLC控制器板,已批量生产
- 稳定性及性能调优<二十四>-------性能优化3【页面加载耗时优化实战、页面滑动流畅度FPS优化实战】
- Bulma和 Tailwind功能比较
- 2-PHP代码审计——PHPCMSV9.6.0 sql注入漏洞
- python毕业设计项目源码选题(14)校园失物招领系统毕业设计毕设作品开题报告开题答辩PPT
- VR家装丨足不出户就能“浸”距离体验入住效果
- MySQL中B+树索引,聚簇索引,二级索引,辅助索引,回表,索引生效条件
- 虚拟机无法访问主机mysql_主机无法连接虚拟机上的mysql
- 牛刀云微信小程序完整项目教程
- 渲染TA实战:摄影测量游戏模型制作指南