01 2019 档案

摘要:A:签到。 B:签到。 C:考虑一种菜自己吃和对方吃的收益差,于是显然按ai+bi排序从大到小选即可。 D:显然图仍是一个DAG,其中度数为0的点是原树的根。由于图中没有重边,瞎考虑一下容易发现,对于每一个点,由根到它的最长路上该点的前驱即为其在原树中的父亲。拓扑排序一下即可。开始写了个不知道啥玩意 阅读全文
posted @ 2019-01-27 22:39 Gloid 阅读(274) 评论(0) 推荐(0)
摘要:单个询问二分答案即可,多组询问直接整体二分再二维BIT。注意保证复杂度。 阅读全文
posted @ 2019-01-26 09:54 Gloid 阅读(154) 评论(0) 推荐(0)
摘要:Day 0 THUWC入场券滚粗。心态爆炸。 Day 1 颓。 Day 2 颓。 Day 3 颓。 Day 4 颓。 Day 5 颓。 Day 6 滚粗。 Day 7 颓。 Day 8 滚了。 不会被禁赛吧(划掉) 阅读全文
posted @ 2019-01-25 07:50 Gloid 阅读(283) 评论(0) 推荐(0)
摘要:Day 0 高铁换乘绕了一大圈,睡了一路。地铁坐了一年。听着我爸打呼噜一晚上睡不着。 Day 1 于是果断决定搬到学校宿舍住。试机赛t1咋是羊肉串啊。为啥还是不会啊。只写了个k是奇数的啊。爆零了啊。 午餐有鸡排,吃完就没咋动了。合影好像挤到别的省的队伍里了,不管了。 然后开始正式爆零。t1啥玩意啊。 阅读全文
posted @ 2019-01-21 21:54 Gloid 阅读(377) 评论(0) 推荐(0)
摘要:求出凸包,显然四个点在凸包上。考虑枚举某点,再移动另一点作为对角线,容易发现剩下两点的最优位置是单调的。过程类似旋转卡壳。 阅读全文
posted @ 2019-01-20 20:33 Gloid 阅读(178) 评论(0) 推荐(0)
摘要:首先考虑把bi和ai同时减i,问题变为非严格递增。显然如果a是一个递减序列,b序列所有数都取其中位数最优。于是划分原序列使得每一部分递减,然后考虑合并相邻两段。如果前一段的中位数<=后一段的中位数,显然各自b的取值不变就行了;否则将b的取值统一改为合并后序列的中位数。感性证明。 于是用左偏树维护中位 阅读全文
posted @ 2019-01-19 22:48 Gloid 阅读(160) 评论(0) 推荐(0)
摘要:建出点分树,每个节点维护其作为点分树上lca对子树内点的贡献,线段树维护即可,同时另开一个线段树以减掉父亲重复的贡献。 阅读全文
posted @ 2019-01-19 19:31 Gloid 阅读(216) 评论(0) 推荐(0)
摘要:考虑建出圆方树。显然只有同一个点相连的某些子树同构会产生贡献。以重心为根后(若有两个任取一个即可),就只需要处理子树内部了。 如果子树的根是圆点,其相连的同构子树可以任意交换,方案数乘上同构子树数量的阶乘即可。而若是方点,注意到其相邻的圆点在原树中是有序地在一个环上的,要产生同构只能旋转或翻转该环。 阅读全文
posted @ 2019-01-19 17:22 Gloid 阅读(284) 评论(0) 推荐(0)
摘要:可能作为最优解的边双都可以这样生成:初始时边双内只有一个点,每次选取边双内部两点(可以相同)和一个当前不在边双内的点集,以该两点为起止点找一条链(当然如果两点相同就是个环)将点集串起来,加入边双。状压dp模拟这个过程即可。注意找链时对二元环特判。 阅读全文
posted @ 2019-01-19 13:11 Gloid 阅读(206) 评论(0) 推荐(0)
摘要:板子题。可以转一下坐标防止被卡。精度和常数实在难以平衡。 阅读全文
posted @ 2019-01-19 02:13 Gloid 阅读(232) 评论(0) 推荐(0)
摘要:如果没有长度为偶数的限制,新建一个点向所有奇点连边,跑欧拉回路即可,显然此时一定存在欧拉回路,因为所有点度数都为偶数。 考虑长度为偶数的限制,将每个点拆成两个点放进一个二分图里,那么每条原图中的边在二分图中会对应两条边,一条长度为偶数的路径在二分图中显然是由某部分出发再走回这部分。我们需要让每条原图 阅读全文
posted @ 2019-01-19 01:11 Gloid 阅读(332) 评论(0) 推荐(0)
摘要:显然容斥后转化为求树链的交。这个题非常良心的保证了查询的路径都是到祖先的,求交就很休闲了。 阅读全文
posted @ 2019-01-18 22:14 Gloid 阅读(187) 评论(0) 推荐(0)
摘要:显然f(i)是一个k+2项式,g(x)是f(i)的前缀和,则显然其是k+3项式,插值即可。最后要求的东西大胆猜想是个k+4项式继续插值就做完了。注意2p>maxint…… 阅读全文
posted @ 2019-01-18 21:12 Gloid 阅读(339) 评论(0) 推荐(0)
摘要:显然只要求出以每个位置开始的AA串数量就可以了,将其和反串同位置的结果乘一下,加起来就是答案。考虑对每种长度的字符串计数。若当前考虑的A串长度为x,我们每隔x个字符设一个关键点,求出相邻两关键点的后缀lcp和前缀lcs,交叉部分就是跨过这两个关键点的A串长度为x的AA串个数。差分一发就能对每个位置求 阅读全文
posted @ 2019-01-18 18:50 Gloid 阅读(223) 评论(0) 推荐(0)
摘要:数据范围过小怎么做都行。考虑优秀一点的做法。考虑dfs树上两台中心服务器间的路径,路径上所有能割掉中心服务器所在子树的点均可以成为答案。直接从两点中的任意一点开始dfs就更方便了。一开始弱智的以为只要是路径上的割点都能作为答案,wa了无数发。当然建棵圆方树也完全没问题。 阅读全文
posted @ 2019-01-18 16:49 Gloid 阅读(250) 评论(0) 推荐(0)
摘要:即在总流量不变的情况下调整每条边的流量。显然先二分答案变为求最小费用。容易想到直接流量清空跑费用流,但复杂度略有些高。 首先需要知道(不知道也行?)一种平时基本不用的求最小费用流的算法——消圈法。算法基于下面的定理:如果残量网络中有负环,当前费用流一定不是最小费用流(似乎很显然?)。注意到分数规划之 阅读全文
posted @ 2019-01-18 15:49 Gloid 阅读(157) 评论(0) 推荐(0)
摘要:设f[i]为连通图的数量,g[i]为不连通图的数量,显然有f[i]=2i*(i-1)/2-g[i],g[i]通过枚举1所在连通块大小转移,有g[i]=Σf[j]*C(i-1,j-1)·2(i-j)*(i-j-1)/2,也即f[i]=2i*(i-1)/2-(i-1)!·Σf[j]·2(i-j)*(i- 阅读全文
posted @ 2019-01-18 14:17 Gloid 阅读(181) 评论(0) 推荐(0)
摘要:点分治,每次考虑包含根的连通块,做树形多重背包即可,dfs序优化。注意题面给的di范围是假的,坑了我0.5h,心态炸了。 阅读全文
posted @ 2019-01-18 12:11 Gloid 阅读(288) 评论(0) 推荐(0)
摘要:线段树优化建图暴力拓扑排序即可。对于已确定的数,拓扑排序时dp,每个节点都尽量取最大值,如果仍与已确定值矛盾则无解。叶子连出的边表示大于号,其余边表示大于等于。 阅读全文
posted @ 2019-01-18 10:56 Gloid 阅读(275) 评论(0) 推荐(0)
摘要:考虑怎样的点满足条件。设其为(xp,yp),则要满足(x0-xp,y0-yp)×(x1-xp,y1-yp)<=(xi-xp,yi-yp)×(xi+1-xp,yi+1-yp)对任意i成立。拆开式子,有(x0-xp)*(y1-yp)-(y0-yp)*(x1-xp)<=(xi-xp)*(yi+1-yp)- 阅读全文
posted @ 2019-01-17 20:52 Gloid 阅读(189) 评论(0) 推荐(0)
摘要:对给定模数分解质因数后约分即可。依然常数巨大过不了。 阅读全文
posted @ 2019-01-17 15:26 Gloid 阅读(158) 评论(0) 推荐(0)
摘要:splay维护哈希值即可。 阅读全文
posted @ 2019-01-17 12:27 Gloid 阅读(158) 评论(0) 推荐(0)
摘要:即动态维护树的重心。考虑合并后的新重心一定在两棵树的重心的连线上。于是对每个点维护其子树大小,合并时在这条链的splay上二分即可。至于如何维护子树大小,见https://blog.csdn.net/neither_nor/article/details/52979425。明明都看那么多题解说要注意 阅读全文
posted @ 2019-01-17 11:37 Gloid 阅读(181) 评论(0) 推荐(0)
摘要:首先一般化的将下水道和塌陷看成一个东西。注意到在从源点出发的所有需要使用某条下水道的最短路径中,该下水道只会被使用一次,该下水道第一个被访问的点相同,且只会在第一个访问的点使用该下水道。这个第一个访问的点显然就是正常dij过程中,该下水道第一个被取出的点。 于是在dij过程中,取出了某个点进行更新后 阅读全文
posted @ 2019-01-15 23:50 Gloid 阅读(742) 评论(0) 推荐(1)
摘要:设f[i]为前i行的最小不协调度,转移枚举这一行从哪开始,显然有f[i]=min{f[j]+abs(s[i]-s[j]+i-j-1-m)p}。大胆猜想有决策单调性就好了。证明看起来很麻烦,从略。注意需要全程long double。 阅读全文
posted @ 2019-01-15 18:19 Gloid 阅读(251) 评论(0) 推荐(0)
摘要:S(i,j)=Σ(-1)j-k(1/j!)·C(j,k)·ki=Σ(-1)j-k·ki/k!/(j-k)!。原式=ΣΣ(-1)j-k·ki·2j·j!/k!/(j-k)! (i,j=0~n)。可以发现i只在式中出现了一次且与j不相关,如果对每个k求出其剩余部分的答案,各自乘一下即可。而剩余部分显然是 阅读全文
posted @ 2019-01-15 16:00 Gloid 阅读(122) 评论(0) 推荐(0)
摘要:注意到n很小,显然的做法是枚举每行是否翻转,然后O(m)统计Σmin(popcount(ai),n-popcount(ai))即可。考虑将每列是否翻转写成一个二进制数,那么翻转相当于让该二进制数与每列异或。统计每列各种状态的出现次数,将其设为cnt[i],将min(popcount(i),n-pop 阅读全文
posted @ 2019-01-15 14:52 Gloid 阅读(187) 评论(0) 推荐(0)
摘要:按卖出时间排序后,设f[i]为买下第i台机器后的当前最大收益,则显然有f[i]=max{f[j]+gj*(di-dj-1)+rj-pi},且若此值<0,应设为-inf以表示无法购买第i台机器。 考虑优化,显然是一个斜率优化式子,设j转移优于k,则f[j]+gj(di-dj-1)+rj>f[k]+gk 阅读全文
posted @ 2019-01-15 01:53 Gloid 阅读(262) 评论(0) 推荐(0)
摘要:合法条件为所有划分出的子图均不存在欧拉回路或不连通,也即至少存在一个度数为奇数的点或不连通。显然可以对每个点集预处理是否合法,然后就不用管这个奇怪的条件了。 考虑状压dp。设f[S]为S集合所有划分方案的满意度之和,枚举子集转移,则有f[S]=Σg[S']*f[S^S']*(sum[S']/sum[ 阅读全文
posted @ 2019-01-14 22:30 Gloid 阅读(150) 评论(0) 推荐(0)
摘要:先只考虑求某个f(k)。考虑转换为计算每条边的贡献,也即该边被所选连通块包含的方案数。再考虑转换为计算每条边不被包含的方案数。这仅当所选点都在该边的同一侧。于是可得f(k)=C(n,k)+ΣC(n,k)-C(sizei,k)-C(n-sizei,k)。于是就可以O(n)求出某个f(k)了。 现在要求 阅读全文
posted @ 2019-01-14 18:49 Gloid 阅读(160) 评论(0) 推荐(0)
摘要:假设已经求出了在每个点的最优期望收益,显然最优策略是仅当移动一次后的期望收益>当前点收益时移动。对于初始点,其两边各存在一个最近的不满足上述条件的位置,因此从初始点开始随机游走,直到移动到这两个点之一时停止即为最优方案。 设当前点为i,左边的停止点为x,右边的停止点为y,考虑在x停止和在y停止的概率 阅读全文
posted @ 2019-01-14 16:32 Gloid 阅读(240) 评论(0) 推荐(0)
摘要:A:签到。 #include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<algorithm> using namespace std; #define ll long 阅读全文
posted @ 2019-01-13 22:13 Gloid 阅读(328) 评论(0) 推荐(0)
摘要:A:签到。 #include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<algorithm> using namespace std; #define ll long 阅读全文
posted @ 2019-01-13 01:37 Gloid 阅读(341) 评论(0) 推荐(0)
摘要:考虑先将平面图转化为对偶图。具体地,将无向边拆成两条有向边。每次考虑找到包围一个区域的所有边。对当前考虑的边,找到该边的反向边在该边终点的出边集中,按极角序排序的后继,这条后继边也是包围该区域的边。这样对偶图就建好了。 考虑怎么用对偶图解决原问题。将外围的无限域也作为对偶图中的一个点,以其为根随便找 阅读全文
posted @ 2019-01-13 01:27 Gloid 阅读(193) 评论(0) 推荐(0)
摘要:即询问凸包是否有交。这显然可以直接求半平面交,但是复杂度O(q(n+m)),且没有什么优化空间。 更直接地表示,即相当于询问是否存在点a∈A,b∈B,使得a+d=b。移项,得到d=b-a。可以发现等式右边是一个闵可夫斯基和。求闵可夫斯基和只需要分别求出两个凸包,然后每次考虑ai+1+bi和ai+bi 阅读全文
posted @ 2019-01-12 16:03 Gloid 阅读(312) 评论(0) 推荐(0)
摘要:明明多个几秒就能场上AK了。自闭。 A:签到。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace st 阅读全文
posted @ 2019-01-12 00:56 Gloid 阅读(206) 评论(0) 推荐(0)
摘要:斯坦纳树板子题。 考虑状压dp,设f[i][j][S]表示当前在点(i,j)考虑转移,其所在的联通块包含的关键点集(至少)为S的答案。 转移时首先枚举子集,有f[i][j][S]=min{f[i][j][x]+f[i][j][y]-a[i][j]} (x&y=0,x|y=S)。 然后考虑从点(i,j 阅读全文
posted @ 2019-01-11 20:05 Gloid 阅读(184) 评论(0) 推荐(0)
摘要:如果a和p互质,用扩欧求逆元就可以直接套用普通BSGS。考虑怎么将其化至这种情况。 注意到当x>=logp时gcd(ax,p)是一个定值,因为这样的话每个存在于a中的质因子,其在ax中的出现次数一定比在p中的多。 于是对x<logp的情况暴力验证。对x>=logp的情况,设d=gcd(ax,p),剩 阅读全文
posted @ 2019-01-11 18:32 Gloid 阅读(164) 评论(0) 推荐(0)
摘要:注意下传标记时也需要新建节点。空间开的尽量大。 阅读全文
posted @ 2019-01-10 20:57 Gloid 阅读(228) 评论(0) 推荐(0)
摘要:fhq-treap,也即非旋treap,可以在不进行旋转操作的前提下维护treap。由于不需要旋转,可以对其可持久化。 fhq-treap的基本操作是merge和split,并且通过这两个操作实现对treap的各项维护。 merge用来合并两棵treap,且要求满足其中一棵treap中的最大值小于另 阅读全文
posted @ 2019-01-10 19:30 Gloid 阅读(172) 评论(0) 推荐(0)
摘要:由Hall定理,任意k种减肥药对应的药材数量>=k。考虑如何限制其恰好为k,可以将其看作是使对应的药材数量尽量少。 考虑最小割。建一个二分图,左边的点表示减肥药,右边的点表示药材。减肥药和其使用的药材连inf边,这里的inf边较大,可以取到1e18;源向减肥药连inf-pi的边,表示不选这种减肥药会 阅读全文
posted @ 2019-01-10 16:03 Gloid 阅读(204) 评论(0) 推荐(0)
摘要:显然排列中的最大值会将排列分成所能看到的建筑不相关的两部分。对于某一边,将所能看到的建筑和其遮挡的建筑看成一个集合。显然这个集合内最高的要排在第一个,而剩下的建筑可以随便排列,这相当于一个圆排列。同时这些集合的相对顺序显然是固定的。那么考虑划分出一些集合分别放在两边即可。这就是一个非常标准的第一类斯 阅读全文
posted @ 2019-01-10 12:36 Gloid 阅读(128) 评论(0) 推荐(0)
摘要:感觉dsu on tree一定程度上还是与点分类似的。考虑求出跨过每个点的最长满足要求的路径,再对子树内取max即可。 重排后可以变成回文串相当于出现奇数次的字母不超过1个。考虑dsu on tree,容易想到遍历时记录每种情况的最大深度,合并时类似点分的逐个计算贡献再合并即可。这里有个问题是得到某 阅读全文
posted @ 2019-01-08 20:02 Gloid 阅读(166) 评论(0) 推荐(0)
摘要:dsu on tree板子题。这个trick保证均摊O(nlogn)的复杂度,要求资瓷O(1)将一个元素插入集合,清空集合时每个元素O(1)删除。(当然log的话就变成log^2了) 具体的,每次先遍历轻儿子的子树,暴力求得所需信息,每遍历完一棵轻子树都将其信息清空。然后遍历重子树,暴力求得所需信息 阅读全文
posted @ 2019-01-08 18:25 Gloid 阅读(182) 评论(0) 推荐(0)
摘要:A:显然应该让未确定的大小尽量大。不知道写了啥就wa了一发。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using names 阅读全文
posted @ 2019-01-06 08:38 Gloid 阅读(197) 评论(0) 推荐(0)
摘要:A:8min才过??? #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define i 阅读全文
posted @ 2019-01-05 08:23 Gloid 阅读(212) 评论(0) 推荐(0)
摘要:离线,每次修改相当于对该规则的所有匹配点的值+1,考虑在trie上打加法标记和匹配标记,匹配标记不下传,加法标记下传遇到匹配标记时清空。注意是用b时刻前缀-a时刻前缀,而不是(a-1)时刻前缀,具体我也不知道为啥可能是我没看懂题。 阅读全文
posted @ 2019-01-04 13:11 Gloid 阅读(393) 评论(0) 推荐(0)
摘要:FWT大杂烩。跟着模拟做很多次FWT即可。 阅读全文
posted @ 2019-01-04 11:20 Gloid 阅读(188) 评论(0) 推荐(0)
摘要:A:对每种商品多源bfs一下每个点到该商品的最近距离,对每个点sort一下取前s个即可。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorith 阅读全文
posted @ 2019-01-03 22:46 Gloid 阅读(220) 评论(0) 推荐(0)
摘要:建出AC自动机及其fail树,每次给新加入的串在AC自动机上经过的点染色,问题即转化为子树颜色数。显然可以用dfs序转成序列问题树状数组套权值线段树解决,显然过不掉。事实上直接树上差分,按dfs序排序后lca处-1,树状数组维护子树和即可。 又一次写了cmp后没放进sort,心态爆炸。 阅读全文
posted @ 2019-01-02 19:50 Gloid 阅读(205) 评论(0) 推荐(0)
摘要:题面甚至没给范围,由数据可得n<=200。容易想到二分答案,暴力枚举某集合的价值,2-SATcheck一下即可。这样是O(n4logn)的。 2-SAT复杂度已经是下界,考虑如何优化枚举。稍微改一下,不妨从大到小枚举较大的集合价值(即枚举边),另一个集合二分答案,同样O(n4logn)。 看起来没什 阅读全文
posted @ 2019-01-02 00:32 Gloid 阅读(265) 评论(0) 推荐(0)
摘要:显然存在方案的数一定是L的因数,考虑对其因子预处理答案,O(1)回答。 考虑每个质因子,设其在g中有x个,l中有y个,则要求所有选中的数该质因子个数都在[x,y]中,且存在数的质因子个数为x、y。对于后一个限制,显然可以简单地容斥,即[x,y]-[x+1,y]-[x,y-1]+[x+1,y-1],枚 阅读全文
posted @ 2019-01-01 19:37 Gloid 阅读(196) 评论(0) 推荐(0)
摘要:即使n个数的异或为0。如果只有两堆,将质数筛出来设为1,做一个异或卷积即可。显然这个东西满足结合律,多堆时直接快速幂。可以在点值表示下进行。 阅读全文
posted @ 2019-01-01 16:34 Gloid 阅读(206) 评论(0) 推荐(0)
摘要:考虑min-max容斥,改为求位集合内第一次有位变成1的期望时间。求出一次操作选择了S中的任意1的概率P[S],期望时间即为1/P[S]。 考虑怎么求P[S]。P[S]=∑p[s] (s&S>0)=1-∑p[s] (s&S==0)。做一个高维前缀和即可。 阅读全文
posted @ 2019-01-01 16:19 Gloid 阅读(215) 评论(0) 推荐(0)
摘要:https://www.cnblogs.com/RabbitHu/p/9182047.html 完全没有学证明的欲望因为这个实在太好写了而且FFT就算学过也忘得差不多了只会写板子 阅读全文
posted @ 2019-01-01 15:08 Gloid 阅读(224) 评论(0) 推荐(0)
摘要:很久以前写过二分答案离线的做法,比较好理解。事实上这还是一个线段树合并+分裂的板子题,相比离线做法以更优的复杂度做了更多的事情。具体不说了。怎么交了一遍luogu上就跑第一了啊 阅读全文
posted @ 2019-01-01 13:27 Gloid 阅读(268) 评论(0) 推荐(0)
摘要:显然的做法是求出斯特林数,但没有什么优化空间。 考虑一种暴力dp,即设f[i]为i块积木的所有方案层数之和,g[i]为i块积木的方案数。转移时枚举第一层是哪些积木,于是有f[i]=g[i]+ΣC(i,j)·f[i-j],g[i]=ΣC(i,j)·g[i-j] (j=1~i)。 考虑优化 。我们发现这 阅读全文
posted @ 2019-01-01 01:24 Gloid 阅读(262) 评论(0) 推荐(0)