摘要:
题面传送门 $NOI$终于出了一道水题。 因为软件包之间有依赖,所以删除一个要把子树删完。安装一个要把路径上全部安装掉。直接树剖即可。 代码实现: #include<cstdio> #include<cstring> using namespace std; int n,m,k,x,y,son[10 阅读全文
摘要:
题面传送门 直接树链剖分即可,还比模板少两个操作。 代码实现: #include<cstdio> #include<cstring> using namespace std; int n,m,k,x,y,idea,son[100039],d[100039],fa[100039],top[100039 阅读全文
摘要:
题面传送门 这道题目蛮好的。 首先暴力不可取,会$T$ 考虑分类讨论,把一段路径分为上行与下行。 设$d_x$为$x$节点的深度,则在上行时被观察到当且仅当$d_v+t_v=d_u$,下行也可推出当且仅当$d_v-t_v=d_u$ 那么直接在树上差分哪一段有贡献。 求答案就是在子树内找与那个数相同的 阅读全文
摘要:
题面传送门 看到树,想到树剖。 然而线段树维护不了这么高次项的数啊。 再转眼一看,\(k\leq 50\) 那不就可以直接前缀和了吗? 这道题在省选时极其卡时限,所以可以先预处理出深度的$k$次方。然后直接树上前缀和即可。 代码实现: #include<cstdio> #include<cstrin 阅读全文