容易发现是树剖裸题。

然后毒瘤选手AKC表示好像可以用树上差分+LCA做。

就这样。水题。

诶那你咋没秒切。

妈也看错样例,然后画错图,接着就是理解错题目,最后R成傻逼之时发现我ST表开数组的顺序错了。。。

废物。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;struct node
{int x,y,next;
}a[610000];int len,last[310000];
void ins(int x,int y)
{len++;a[len].x=x;a[len].y=y;a[len].next=last[x];last[x]=len;
}int Bin[30],f[310000][30];
int dep[310000];
void dfs(int x)
{for(int i=1;i<=25;i++)if(dep[x]>=Bin[i])f[x][i]=f[f[x][i-1]][i-1];for(int k=last[x];k;k=a[k].next){int y=a[k].y;if(y!=f[x][0]){f[y][0]=x;dep[y]=dep[x]+1;dfs(y);}}
}
int LCA(int x,int y)
{if(dep[x]<dep[y])swap(x,y);for(int i=25;i>=0;i--)if(dep[x]-dep[y]>=Bin[i])x=f[x][i];if(x==y)return x;for(int i=25;i>=0;i--)if(f[x][i]!=f[y][i]&&dep[x]>=Bin[i]) x=f[x][i], y=f[y][i];return f[x][0];
}//------LCA---------int ch[310000];
int tmp[310000];
void update(int x)
{for(int k=last[x];k;k=a[k].next){int y=a[k].y;if(y!=f[x][0]){update(y);tmp[x]+=tmp[y];}}
}
int main()
{int n,x,y;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&ch[i]);len=0;memset(last,0,sizeof(last));for(int i=1;i<n;i++){scanf("%d%d",&x,&y);ins(x,y);ins(y,x);}//----sc----
    Bin[0]=1;for(int i=1;i<=25;i++)Bin[i]=Bin[i-1]*2;dep[1]=1;f[1][0]=0;dfs(1);for(int i=1;i<=n-1;i++){tmp[ch[i]]++;tmp[ch[i+1]]++;int lca=LCA(ch[i],ch[i+1]);tmp[lca]--;if(f[lca][0]!=0)tmp[f[lca][0]]--;}update(1);tmp[ch[1]]++;for(int i=1;i<=n;i++)printf("%d\n",tmp[i]-1);return 0;
}

转载于:https://www.cnblogs.com/AKCqhzdy/p/8562302.html

bzoj3631: [JLOI2014]松鼠的新家相关推荐

  1. bzoj3631[JLOI2014]松鼠的新家

    bzoj3631[JLOI2014]松鼠的新家 题意: 给个n点树,再给个节点的游览顺序,每经过一个节点(包括上一个游览的点到下一个游览的点路径上的点)就可以从这个节点拿走一个糖,问所有节点一开始要放 ...

  2. BZOJ3631 [JLOI2014]松鼠的新家

    Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在"树&q ...

  3. [BZOJ3631][JLOI2014]松鼠的新家

    嗯...企图做ZJOI2011,结果一题都不会QAQ.生气的写树剖来了~ 这题暴力的树剖是可以的,但我是在黄学长那找了这题,他好像有个非常妙的做法,现在差不多要去打ball了,之后再学习一下吧. 树剖 ...

  4. [BZOJ3631][JLOI2014]松鼠的新家(链剖)

    题目描述 传送门 题解 小傻逼手残 随便写链剖. 代码 #include<iostream> #include<cstring> #include<cstdio> ...

  5. [Luogu 3258] JLOI2014 松鼠的新家

    [Luogu 3258] JLOI2014 松鼠的新家 LCA + 树上差分. 我呢,因为是树剖求的 LCA,预处理了 DFN(DFS 序),于是简化成了序列差分. qwq不讲了不讲了,贴代码. #i ...

  6. P3258 [JLOI2014]松鼠的新家

    文章目录 题意: 题解: 树上差分 代码: 树链剖分 代码: P3258 [JLOI2014]松鼠的新家 题意: n个点,n-1条边,给出每个点的拜访顺序,问每个点经过几次(最后一次移动不算拜访) 题 ...

  7. 洛谷 P3258 [JLOI2014]松鼠的新家 解题报告

    P3258 [JLOI2014]松鼠的新家 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他 ...

  8. 3631: [JLOI2014]松鼠的新家

    3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 707  Solved: 342 [Submit][Sta ...

  9. bzoj 3631: [JLOI2014]松鼠的新家(LCA+树上差分)

    3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 2059  Solved: 1030 [Submit][S ...

最新文章

  1. 【TCP/IP】IP路由选择
  2. cad打印样式ctb丢失_我的第一次打印:cad模型空间套图框打印图纸
  3. mysql 让别人连接我的数据库
  4. 笔记-信息化与系统集成技术-客户关系系统CRM
  5. XslTransform.Transform方法将结果输出到字符串
  6. 基于Linux的USB 主/从设备之间通讯的三种方式
  7. MySQL的索引创建、删除
  8. 设计模式(八)组合模式 Composite
  9. 帆软报表-通过代码来创建一个模板文件
  10. 电脑格式化的危害_防止硬盘被格式化的六大方法
  11. Security+ 学习笔记25 硬件与数据安全
  12. SpringMVC的RESTful(二)定制格式
  13. XShell免费版(解决官网打不开的问题)
  14. 阿拉丁指数丨《2021 年度小程序互联网发展白皮书》4.5 亿+DAU 小程序的 6 大发展趋势
  15. 分享97个社区论坛PHP源码,总有一款适合你
  16. 关于数学计算机手抄报简单的,数学手抄报简单又漂亮图片
  17. 计算机操作中常用的几种快捷方式,常用的30个电脑快捷操作技巧
  18. python多核运行程序_python单进程能否利用多核cpu的测试结论
  19. 安卓系统 samba服务器搭建,介绍在电脑上建samba服务器的方法 安卓samba服务器的安装方法...
  20. DirectoryInfo 类

热门文章

  1. nfc卡模式与标准模式_渠道如何标准化管理,建立新的销售模式,提升业绩完成率...
  2. linux ls 中文乱码_每天一个linux命令:Linux文件类型与扩展名
  3. 剩余 大小 查看内存_JVM的内存分配策略以及进入分代的条件
  4. 办公室中有一台计算机连接打印机,办公室就一个打印机,怎么让多个电脑一起用...
  5. html读取servlet,简单html与servlet交互(HTML利用servlet读取txt)
  6. 电脑表格制作教程入门_第三节 CorelDRAW制作作品的流程 - CorelDRAW基础入门教程 - 平面设计学院...
  7. 从键盘上录入学生人数和每个学生的分数,按分数降序输出所有的分数,java冒泡排序应用
  8. php调用restful接口_分享一个PHP调用RestFul接口的函数
  9. python实例 91,92,93,94
  10. android点击切换,android 导航栏中的按钮的点击切换