bzoj3531 [JLOI2014]松鼠的新家

2024-01-10 02:48

本文主要是介绍bzoj3531 [JLOI2014]松鼠的新家,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

传送门
Description

松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的。天哪,他居然真的住在“树”上。松鼠想邀请小熊维尼前来参观,并且还指定一份参观指南,他希望维尼能够按照他的指南顺序,先去a1,再去a2,……,最后到an,去参观新家。
可是这样会导致维尼重复走很多房间,懒惰的维尼不听地推辞。可是松鼠告诉他,每走到一个房间,他就可以从房间拿一块糖果吃。维尼是个馋家伙,立马就答应了。
现在松鼠希望知道为了保证维尼有糖果吃,他需要在每一个房间各放至少多少个糖果。因为松鼠参观指南上的最后一个房间an是餐厅,餐厅里他准备了丰盛的大餐,所以当维尼在参观的最后到达餐厅时就不需要再拿糖果吃了。
Input

第一行一个整数n,表示房间个数
第二行n个整数,依次描述a1-an
接下来n-1行,每行两个整数x,y,表示标号x和y的两个房间之间有树枝相连。
Output

一共n行,第i行输出标号为i的房间至少需要放多少个糖果,才能让维尼有糖果吃。
Sample Input

5

1 4 5 3 2

1 2

2 4

2 3

4 5

Sample Output

1

2

1

2

1

HINT

2<= n <=300000

题解

一开始看到这道题感觉好水啊,不就是一道树剖板子题么?然而在洛谷上无限被卡常后,我奋(da)发(kai)图(nao)强(dong),加读入优化、减少线段树使用次数、简化线段树,终于以999ms的速度卡过了那个数据点!
以前感觉bzoj的测评姬应该比其他oj稍微慢一点,提交以后以为将要面对bzoj的第一个TLE了,结果。。。
耗时2072msAC,比洛谷2536ms的速度还快?好迷啊
感觉自己的自带小常数的树链剖分也虚了啊······
rp - -

CODE:

#include<cstdio>
const int INF=1e9;
const int N=3e5+10;
struct edge
{int next,to;
}a[N<<1];
int t[N<<2];
int head[N],size[N],son[N],f[N],deep[N],top[N],pos[N],next[N];
int n,x,y,num,tot;
inline int max(int a,int b){return a>b?a:b;}
inline int min(int a,int b){return a<b?a:b;}
inline void swap(int &a,int &b){a^=b,b^=a,a^=b;}
inline void read(int &n)
{n=0;char c=getchar();while(c<'0'||c>'9') c=getchar();while(c>='0'&&c<='9') n=n*10+c-48,c=getchar();
}
inline void add(int x,int y)
{a[++num].next=head[x],a[num].to=y,head[x]=num;a[++num].next=head[y],a[num].to=x,head[y]=num;
}
void dfs(int now,int fa,int depth)
{deep[now]=depth;f[now]=fa;size[now]=1;int tmp=-INF;for(int i=head[now];i;i=a[i].next)if(a[i].to!=fa){dfs(a[i].to,now,depth+1);size[now]+=size[a[i].to];if(size[a[i].to]>tmp) tmp=size[a[i].to],son[now]=a[i].to;}
}
void dfs2(int now,int high)
{top[now]=high;pos[now]=++tot;if(son[now]) dfs2(son[now],high);for(int i=head[now];i;i=a[i].next)if(a[i].to!=f[now]&&a[i].to!=son[now]) dfs2(a[i].to,a[i].to);
}
inline void pushdown(int now)
{if(!t[now]) return;int s1=now<<1,s2=s1|1;t[s1]+=t[now],t[s2]+=t[now];t[now]=0;
}
void Add(int L,int R,int l,int r,int now)
{if(L<=l&&r<=R){t[now]++;return;}int mid=(l+r)>>1;pushdown(now);if(L<=mid) Add(L,R,l,mid,now<<1);if(R>mid) Add(L,R,mid+1,r,now<<1|1);
}
int ask(int p,int l,int r,int now)
{if(l==r) return t[now];int mid=(l+r)>>1;pushdown(now);if(p<=mid) return ask(p,l,mid,now<<1);return ask(p,mid+1,r,now<<1|1);
}
void addpath(int x,int y)
{int L,R;if(top[x]==top[y]){L=min(pos[x],pos[y]);R=max(pos[x],pos[y]);return Add(L,R,1,n,1);}if(deep[top[x]]<deep[top[y]]) swap(x,y);L=min(pos[x],pos[top[x]]);R=max(pos[x],pos[top[x]]);Add(L,R,1,n,1);addpath(y,f[top[x]]);
}
int main()
{read(n);for(int i=1;i<=n;i++)read(next[i]);for(int i=1;i<n;i++)read(x),read(y),add(x,y);dfs(1,0,1);dfs2(1,1);for(int i=1;i<n;i++)addpath(next[i],next[i+1]);for(int i=1;i<=n;i++)if(i!=next[1]) printf("%d\n",ask(pos[i],1,n,1)-1);else printf("%d\n",ask(pos[i],1,n,1));return 0;
}

这篇关于bzoj3531 [JLOI2014]松鼠的新家的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/589305

相关文章

轻舟已过万重山:三年转型终成正果,三只松鼠有望重回百亿

无数的企业曾倒在“逆天改命”的路上,所以稀缺的成功显得更为可贵。作为零食行业的代表,三只松鼠破而后立的战略转型,犹然如此。 2022年,三只松鼠开启高端性价比战略转型,在零食市场闯过了一关又一关——渠道乱战、量贩崛起、消费意识骤变。它的成长曲线,从左到右画出了一个“U”型,并在右侧不断向上。 8月29日,三只松鼠公布2024年半年报。一份三年来最好的业绩,呈现在市场眼前。这份成绩单也开启了一个

甲醛最怕三个克星 新家去除甲醛最快最有效的方法

甲醛最怕三个克星 新家去除甲醛最快最有效的方法 甲醛,一种常见的室内污染物,对人体健康有着极大的危害。新家装修后,甲醛的释放期可长达数年,因此,找到快速有效的甲醛去除方法显得尤为重要。幸运的是,有三个克星可以帮助我们应对甲醛问题,让新家变得更加安全和宜居。 甲醛最怕的三个克星,通风算一个。通风是最简单也是最经济的甲醛去除方法。通过打开窗户和门,让室内外空气流通,可以有效降低

AI大模型日报#0622:Claude 3.5 Sonnet超越GPT-4o、盘古大模型跳级发布、松鼠AI多模态教育大模型

导读:AI大模型日报,爬虫+LLM自动生成,一文览尽每日AI大模型要点资讯!目前采用“文心一言”(ERNIE-4.0-8K-latest)生成了今日要点以及每条资讯的摘要。欢迎阅读!《AI大模型日报》今日要点:中科大与上海AI Lab等团队发布了高质量视频数据集ShareGPT4Video,通过GPT-4v的视觉能力实现视频的高质量描述,对视频理解和生成任务有着重要意义。同时,OpenAI收购数据

走出“至暗时刻”,托举三只松鼠的力量是什么?

品牌是时代的产物,也随时代而变化。能存在超过十年,依旧欣欣向荣的品牌,身上或多或少都承载了关于穿越周期的哲学。 最近的例子是零食行业的三只松鼠,三只松鼠的创业史,内涵非常丰富,有电商和实体的纠缠,有坚果零食行业的变迁。用十六个字来总结就是:起于草莽、巅峰遇险、低谷重生、曙光再现。 2019年,三只松鼠成为零食行业首个年收入破百亿的公司,同年上市成功拿下连续涨停,但高光之后随即遇到转型难题。三只

股东减持,营收“四连降”,三只松鼠用什么撑起“百亿”野心?

近日,国内零食品牌三只松鼠(SZ:300783)发布了2023年业绩报告。从规模效益的层面出发,三只松鼠在高端化和高性价比逻辑下对门店进行了集中优化,虽然营收略有下降,但利润端却实现了强势回暖。 不过,这份利润双位数增长的财报并未提振资本市场的信心。近年来,三只松鼠的第二、第三大股东也在轮番减持,使得该公司贯彻落实的“高端性价比”口号颇有曲高和寡的意味。 基于未来新构想,2024年三只松鼠的

BZOJ 3631 [JLOI2014]松鼠的新家 树链剖分

Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的。天哪,他居然真的住在“树”上。松鼠想邀请小熊维尼前来参观,并且还指定一份参观指南,他希望维尼能够按照他的指南顺序,先去a1,再去a2,……,最后到an,去参观新家。 可是这样会导致维尼重复走很多房间,懒惰的维尼不听地推辞。可是松

【蓝桥杯选拔赛真题69】python小松鼠运坚果 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析

目录 python小松鼠运坚果 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python小松鼠运坚果 第十五届蓝桥杯青少年组python比赛选拔赛真题 一、题目要求 (注:input()输入函数的括号中不允许添加任何信息)

BZOJ3531 [Sdoi2014]旅行——树剖+动态开点线段树

Description S国有N个城市,编号从1到N。城市间用N-1条双向道路连接,满足 从一个城市出发可以到达其它所有城市。每个城市信仰不同的宗教,如飞天面条神教、隐形独角兽教、绝地教都是常见的信仰。为了方便,我们用不同的正整数代表各种宗教, S国的居民常常旅行。旅行时他们总会走最短路,并且为了避免麻烦,只在信仰和他们相同的城市留宿。当然旅程的终点也是信仰与他相同的城市。S国政府为每个城市标

【LOJ#2236】【洛谷P3258】松鼠的新家【LCA】【树上差分】

题目大意: 题目链接: 洛谷:https://www.luogu.org/problem/P3258 LOJ:https://loj.ac/problem/2236 给出一棵树以及 n n n个点走的顺序,求每一个点会被经过几次。规定到达最后一个点的那一次不算。 思路: 这是一道在「省选斗兽场 − - −树链剖分」的一道题目。 本着背树剖板子心态来刷的。看完题后 这不是一道树上差分sb题

教育大模型浪潮中,松鼠Ai的“智适应”故事好讲吗?

“计算机对于学校和教育产生的影响,远低于预期,要改变这一点,计算机和移动设备必须致力于提供更多个性化的课程,并提供有启发性的反馈。” 这是2011年5月份乔布斯与比尔盖茨最后一次会面时的记录,当时的电脑还十分落后,Alphago还下不过职业选手,在大洋彼岸的中国,马云的淘宝网刚刚向大众介绍网购,最火的游戏还是魔兽世界——电脑的发展相比现在极度落后。 如果乔布斯活到了现在,他一定会改变十年前的判