自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 【CF553E】Kyoya and Train(期望dp,SPFA,FFT)

考虑 dp。发现正着 dp 好像不太好做,毕竟初值不太好设,而且时间一大于 ttt 费用就要加上 xxx,所以考虑倒着 dp。设 fu,jf_{u,j}fu,j​ 表示现在已经到达 uuu 点,耗时 jjj,问到达 nnn 点的最小期望费用。容易得到边界条件:fi,j=disi+x(j>t)f_{i,j}=dis_i+x(j>t)fi,j​=disi​+x(j>t)(其中 disidis_idisi​ 表示 iii 到 nnn 的最短路,可以用dijkstra 预处理),这个很好解释

2021-01-25 21:02:48 26

原创 【CF464E】The Classic Problem(主席树优化高精,dijkstra)

题目也没有给出什么很特殊的性质,所以考虑能不能高精度最短路。dijkstra 中涉及的运算主要是两个:加法和比较大小。注意到题目给出的边权是 2k2^k2k 的形式,我们不如直接用二进制表示每一个数。而比较大小的实质是从高到低找到第一个不相等的位,这个我们可以用哈希+二分实现。发现加法并不是两个大数相加,而是一个大数 xxx 加上一个 2m2^m2m(代码中的具体体现是 dis[u]+w[i]),这样做的是实质是从 xxx 的第 mmm 位开始找到最长的一段 111,并把这一段 111 置为 000

2021-01-25 20:16:24 43 1

原创 【CF1253F】Cheap Robot(最小生成树,最短路)

首先发现所有询问点都是充电桩这个条件很有用。它能滋生出一种暴力到极端的想法:用 Floyd 对全局跑一遍最短路。然后新建一个图,图中两两充电桩连一条边,边权为它们之间的最短路,代表着从这个充电桩直接走到那个充电桩最少要备多少电。然后再把新图的最小生成树建出来,询问时直接询问树上两点路径边权最大值。发现时间压根过不去,也不太好直接优化。发现瓶颈主要是在跑 Floyd O(n3)O(n^3)O(n3) 和建图 O(k2)O(k^2)O(k2),这是我们我们远远不能接受的。但是原图最多也就 mmm 条边,

2021-01-25 19:56:46 36

原创 【CF1416D】Graph and Queries(虚点)

带删除维护最大值显然不好做,所以考虑先把最后的图建出来,再从后往前加边。但是询问中还带修改(让 pu=0p_u=0pu​=0),这样会影响后面的询问,所以也不能加边时就得到答案。这里给出一种简单易懂的做法:在从后往前枚举操作的时候:如果是加边 (u,v)(u,v)(u,v) 且 uuu 和 vvv 不连通(设它们所在连通块的根分别为 aaa、bbb),我们就新建一个虚点连向 aaa、bbb,并且把这个虚点作为 aaa、bbb 的父亲。如果是询问 xxx,也就是询问当前 xxx 所在连通块内

2021-01-25 19:47:22 25

原创 【CF1120D】Power Tree(建图,差分,最小生成树)

题面题意有点难懂。主要是洛谷给的翻译太zz了。大概的意思是:给定一棵 nnn 个点的有根树,111 为根,每一个点有一个代价 cic_ici​。然后有两个人 Alice 和 Bob 在玩游戏。在第一阶段,Alice 会购买树上的一些点,购买一个点的代价是 cic_ici​。在第二阶段,Bob 将给树的所有叶子节点设置一个点权。在第三阶段,Alice 可以选择他在第一阶段购买的一些点。对于他选择的每一个点 uuu,他可以让 uuu 子树内的所有叶子节点的点权加上他任意指定的一个整数 xxx。

2021-01-24 22:22:22 156

原创 【CF888G】Xor-MST(01Trie,最小生成树)

看到异或最值要么是线性基要么是 01Trie。线性基显然可以排除。那么先把所有的 aia_iai​ 插入 01Trie 内。然后发现对于任意两个数 aia_iai​ 和 aja_jaj​:你发现它们在 rt∼lcart \sim lcart∼lca 路径上异或出来都是 000。不妨定义两个结束节点的 “分离节点” 为它们的 lcalcalca,那么 aixor⁡aja_i \operatorname{xor} a_jai​xoraj​ 的前 deplcadep_{lca}deplca​ 位都是

2021-01-22 15:33:32 27

原创 【EA的练习赛2】【洛谷P7274】草地(单调栈,LCT维护最小生成树)

学到了很多。我们分步走。首先在做这道题前先观察到几个小性质:操作顺序不同不影响结果发现对于每一个黑点,一通操作过后它扩展出的区域是一个矩形,而操作顺序是不影响这个矩形的大小和位置的。最后的要求 “任意两个黑色格子八连通” 等价于 “一开始图中的黑色格子八连通”。这是显然的,因为对于一个黑点,它扩展出来的格子是个矩形,肯定八连通,所以我们只需要求一开始图中给定的黑点在最后八连通就好了。那么对于两个黑点,操作它们同时往左扩展一格,可以看作是让这两个黑点的水平距离减 111。不妨把八连通分

2021-01-21 20:34:49 55

原创 【XSY3812】鱼死网破(计算几何?)

题面题解先对于每个 xxx 轴上方的点,找到所有墙,按照极角排序,合并重合的墙。对于每一个端点引一条射线,左端点的射线权值是 +1+1+1,右端点是 −1-1−1,可以发现一个点不能看到的点数等于这个点左边的射线的权值和。观察到这些直线都经过至少一个墙的端点,可以将这些直线按照经过的端点分类,每一类内极角排序。然后查询的时候对于每一堵墙二分查询就好了。时间复杂度 O(k(n+m)log⁡n)O(k(n+m)\log n)O(k(n+m)logn)。代码如下:#include<bits

2021-01-12 13:36:56 24

原创 【XSY3810】公路建设(线段树,kruskal)

题面题解一开始竟然没反应过来是最小生成树。考虑用线段树直接维护每个区间的答案。注意到一个区间最多只有 n−1n-1n−1 条树边有用,所以线段树每个节点用一个 vector按权值从小到大保存区间内用到的树边即可。合并两个区间的信息时,只需要将两棵子树存的树边归并排序,然后做 Kruskal 算法。时间复杂度 O((m+qlog⁡m)nα(n))O\big((m+q\log m)n\alpha(n)\big)O((m+qlogm)nα(n))。#include<bits/stdc++.h

2021-01-09 21:00:49 37

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除