把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

06 2020 档案

摘要:题面传送门 代码难度稍大,思路其实不难。 题目求最大最小,那么就是二分。 那么怎么验证呢。 首先预处理出所有航线的时间,然后跑出大于mid的航线,在树上差分。 只有每一条航线都经过的路径才可能满足要求,所以先找出这样的路径。 对于每一条边,我们都把权值放在下面的节点上,这样的话就可以直接跑一遍验 阅读全文
posted @ 2020-06-30 22:04 275307894a 阅读(39) 评论(0) 推荐(0) 编辑
摘要:题面传送门 树剖裸题,感觉难度虚高。 当两个部落开战时,我们就把下面那个点的权值设为1,休战则设为0即可。 这样有一个好处就是查询时如果有1可以直接跳出。 其他基本操作。 代码实现: #include<cstdio> #include<cstring> using namespace s 阅读全文
posted @ 2020-06-30 21:56 275307894a 阅读(59) 评论(0) 推荐(0) 编辑
摘要:题面传送门 很裸的一道题。感觉难度虚高。 可以先把这棵树的欧拉序跑出来,然后每次询问是根节点到当前点的权值,那么树状数组随便维护一下就好了。 代码实现: #include<cstdio> #include<cstring> using namespace std; int n,m,k,x,y,ans 阅读全文
posted @ 2020-06-30 21:53 275307894a 阅读(39) 评论(0) 推荐(0) 编辑
摘要:题面传送门 因为只有一次贸易,所以可以枚举中转点。 从点1出发跑最小值SPFA,从点n出发跑最大值SPFA,这个贪心应该都懂。 然后枚举中转点,注意跑不到的点不能枚举。 代码实现: #include<cstdio> #include<cstring> #include<queue> 阅读全文
posted @ 2020-06-30 21:51 275307894a 阅读(28) 评论(0) 推荐(0) 编辑
摘要:题面传送门 普通树剖,注意线段树标记下推清零时左右儿子的懒标记要清零 代码实现; #include<cstdio> #include<cstring> #define max(a,b) ((a)>(b)?(a):(b)) using namespace std; int n,m,k,son[1000 阅读全文
posted @ 2020-06-28 16:37 275307894a 阅读(65) 评论(0) 推荐(0) 编辑
摘要:题面传送门 感觉评分虚高。 其实和NOI2015的软件包管理器差不多,题解 正常操作,直接区间覆盖即可。 一不小心拿了个次优解 代码实现: #include<cstdio> #include<cstring> using namespace std; int d[500039],idea,siz 阅读全文
posted @ 2020-06-27 21:59 275307894a 阅读(52) 评论(0) 推荐(0) 编辑
摘要:题面传送门 spoj卡语言太恶心所以来洛谷上交了。 正常树剖不解释但是有些地方可以写法优化。 比如线段树只要一个数组就够了。 代码实现: #include<cstdio> #include<cstring> #define max(a,b) ((a)>(b)?(a):(b)) using nam 阅读全文
posted @ 2020-06-27 21:55 275307894a 阅读(55) 评论(0) 推荐(0) 编辑
摘要:题面传送门 第一次一遍过国集紫题。好激动。 一看就是树剖,只不过操作有点多。 把每条边的权值放在儿子节点即可。 对于取相反数放懒标记即可。 其他是树剖正常操作。 代码实现: #include<cstdio> #include<cstring> #define max(a,b) ((a)>(b)?(a 阅读全文
posted @ 2020-06-27 21:50 275307894a 阅读(39) 评论(0) 推荐(0) 编辑
摘要:题面传送门 这里可以把边权转化成点权,即把边的值放在儿子节点上,这样能确保唯一性。 而这样的话lca就不能算了,可以通过id+1处理掉。 树状数组维护即可。 代码实现: #include<cstdio> #include<cstring> using namespace std; int n 阅读全文
posted @ 2020-06-26 21:42 275307894a 阅读(51) 评论(0) 推荐(0) 编辑
摘要:题面传送门 一眼看上去就是树剖裸题。 线段树无所不能,连异或都可以维护。直接树剖即可。 代码实现: #include<cstdio> #include<cstring> using namespace std; int n,m,k,idea,son[100039],siz[100039],d[100 阅读全文
posted @ 2020-06-26 21:40 275307894a 阅读(53) 评论(0) 推荐(0) 编辑
摘要:题面传送门 NOI终于出了一道水题。 因为软件包之间有依赖,所以删除一个要把子树删完。安装一个要把路径上全部安装掉。直接树剖即可。 代码实现: #include<cstdio> #include<cstring> using namespace std; int n,m,k,x,y,son[10 阅读全文
posted @ 2020-06-25 22:20 275307894a 阅读(54) 评论(0) 推荐(0) 编辑
摘要:题面传送门 直接树链剖分即可,还比模板少两个操作。 代码实现: #include<cstdio> #include<cstring> using namespace std; int n,m,k,x,y,idea,son[100039],d[100039],fa[100039],top[100039 阅读全文
posted @ 2020-06-25 22:17 275307894a 阅读(42) 评论(0) 推荐(0) 编辑
摘要:题面传送门 这道题目蛮好的。 首先暴力不可取,会T 考虑分类讨论,把一段路径分为上行与下行。 设dxx节点的深度,则在上行时被观察到当且仅当dv+tv=du,下行也可推出当且仅当dvtv=du 那么直接在树上差分哪一段有贡献。 求答案就是在子树内找与那个数相同的 阅读全文
posted @ 2020-06-25 22:15 275307894a 阅读(43) 评论(0) 推荐(0) 编辑
摘要:题面传送门 看到树,想到树剖。 然而线段树维护不了这么高次项的数啊。 再转眼一看,k50 那不就可以直接前缀和了吗? 这道题在省选时极其卡时限,所以可以先预处理出深度的k次方。然后直接树上前缀和即可。 代码实现: #include<cstdio> #include<cstrin 阅读全文
posted @ 2020-06-25 22:10 275307894a 阅读(46) 评论(0) 推荐(0) 编辑
摘要:题面传送门 只有一次查询,想到差分。 那么我们怎么把差分运用到树上呢? 自然要在lca上下文章了。 可是不能直接在lca上下,得在fa_上下,即fu++fv++flca(x,y)ffalca(x,y) 注意不是每个点都出现,我因为这个调了一天。 代 阅读全文
posted @ 2020-06-24 20:21 275307894a 阅读(37) 评论(0) 推荐(0) 编辑
摘要:题面传送门 其实这道弱省省选还蛮简单的。 稍微思考一下我们就可以得出一个结论:集合点肯定在三个点中某两个点的lca上。 因为无论这个点朝哪个方向移都是靠近一个点远离两个点肯定不会更优。 所以我们可以先跑出三个点的lca然后再分别算答案输出。 但是这样要跑6lca,在qzezoj 阅读全文
posted @ 2020-06-24 20:18 275307894a 阅读(44) 评论(0) 推荐(0) 编辑
摘要:题面传送门 这道题是树剖模板。 树剖第一步:dfs1,找出每个点子树大小,父亲节点,重儿子,深度。 第二步:dfs2,找出每个点编号,把原来的权值赋值过来,先标重儿子再标轻儿子,标记每个链顶。 这里最大的点最多只有logn条链。 因为每更换一条链都要一个轻链,而点数会除以2 阅读全文
posted @ 2020-06-21 16:12 275307894a 阅读(58) 评论(0) 推荐(0) 编辑
摘要:题面传送门 这道题很明显是要我们求强连通分量。我们可以用Tarjan求。 对于Tarjan的求法,是这样做的: 记录第几个访问到:用一个dfn数组。 记录这个点的子树能访问到的最早访问到的点,为low。 记录一个栈,表示没有弹出的点。 记录vis,表示是否在栈里。 对于每个点,从 阅读全文
posted @ 2020-06-21 16:01 275307894a 阅读(53) 评论(0) 推荐(0) 编辑
摘要:题面传送门 感觉这道紫题质量还是可以的。 我们先跑一遍Tarjan求出图的割点,然后根据割点将图割开。对于每个连通块,分类讨论: 如果没有接触到割点,那么要设两个点,因为要考虑原来那个塌了的情况。方案数乘上C^{2}_ 如果只有一个割点,那么为了防止割点崩塌,得设一个,方案数乘上n 如果 阅读全文
posted @ 2020-06-20 20:01 275307894a 阅读(43) 评论(0) 推荐(0) 编辑
摘要:题面传送门 这是一道主席树的模板题。 很遗憾,被我卡掉了 lxl 显然这么小的空间主席树是肯定过不去的,空间复杂度O(4nlogn),开满约110M,只有80分。 考虑优化。 我们的主席树的划分是这么写的 m=(l+r)>>1 之所以要开四倍空间,是因为会有这样的东西所以不能用主席树。 阅读全文
posted @ 2020-06-16 18:34 275307894a 阅读(95) 评论(0) 推荐(0) 编辑
摘要:题面传送门 明显势能线段树。 这里证明一下取模的下界。 对于一个数x,若取模的数y>\frac{2},那么x,若取模的数y<\frac{2},那么x,则一个数至多取模logn次就会为1。 修改至多会增加logn阅读全文
posted @ 2020-06-13 19:59 275307894a 阅读(60) 评论(0) 推荐(0) 编辑
摘要:题面传送门 一眼就是势能线段树的模板题。 关于欧拉函数的上界我不会证,这里证一个复杂度下界。 对于每一个数x,其最大的约数最大是2\(\)2<y<x都必定不是x的约数,所以复杂度下界logn,总复杂度nlogn 代码实现: #includ 阅读全文
posted @ 2020-06-09 18:39 275307894a 阅读(54) 评论(0) 推荐(0) 编辑
摘要:题面传送门 明显是换根dp,转移时讨论一下就好了。 代码实现: #include<cstdio> #include<cstring> #define max(a,b) ((a)>(b)?(a):(b)) using namespace std; int n,m,k,head,h[1000039] 阅读全文
posted @ 2020-06-06 21:52 275307894a 阅读(32) 评论(0) 推荐(0) 编辑
摘要:tg: 开场感觉pj的第一题出到tg来了(滚粗flag+1)然后用前缀和水水就过了。第二题感觉像是矩乘板子,推了一下确实满足交换律,然后就打了一个矩阵快速幂(滚粗flag+2),感觉复杂度O(qn3logn)很不可行,于是写了一些常数优化,最后也没卡进1s。第三题匆 阅读全文
posted @ 2020-06-06 21:50 275307894a 阅读(46) 评论(0) 推荐(0) 编辑

浏览器标题切换
浏览器标题切换end
点击右上角即可分享
微信分享提示