退役前的一句话题解
Posted asuldb
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了退役前的一句话题解相关的知识,希望对你有一定的参考价值。
由于太懒了,没什么意思的题就写一句话题解了
10.07
分别对\(\sum a,\sum b\)开状态开不下,考虑到\(a_i\leq b_i\),所以任意时刻都有\(\sum a\leq \sum b\),所以设\(dp_i,j\)表示选到了第\(i\)个数满足\(\sum a\leq j\leq \sum b\)的最小代价,显然有转移\(dp_i,j=\min_k=j-b_i^j-b_idp_i-1,k+c_i\),单调队列优化转移即可
两个数异或起来只有两个\(1\),考虑枚举这两个\(1\)分别在哪里,即对于\(c=2^i+2^j(i\neq j)\),求有多少对\(a_i\bigoplus b_j=c\),拆一下式子变成了\((a_i\bigoplus 2^i)\bigoplus (b_j\bigoplus 2^j)=0,i\neq j\),于是我们能将每一个\(a,b\)搞成\(\log\)个数,得到了两个\(n\log n\)长的数列,求一下这两个数列有多少对相等的数对即可。考虑\(i\neq j\)的限制,发现对于原数列一对相等的数,在每一个数位都会被计算一次,于是还要减掉原数列里相等的数对个数乘上数位个数。
通过玄妙的挂链hash能做到\(O(n\log n)\)。写两个\(\log\)基本都被卡了,比如说不会hash的我。
分析一下不难发现对于所有“添”连边得到的图一定是仙人掌(因为保证三线不共点,所以一条边不会出现在两个简单环里)
众所周知,给仙人掌染色最多只需要三种颜色。当且仅当存在奇环的时候,需要用到的颜色数是\(3\)。我们发现当且仅当有不少于三种斜率的时候一定会存在奇环(三种斜率一定会构成一个三角形,而三角形是一个三元环),于是判断一下是否存在三种或以上不同斜率即可;
不难发现只需要按\(\fract_ip_i\)从小到大排序之后顺着选过去;修改用线段树维护一下即可。
用一个树上差分能够维护出每一条边被经过的次数,如果选定了根我们贪心的选择经过次数最大的那条边作为重儿子即可。所以随便先定一个根,大力换根即可。由于换根的时候可能会把原来的重儿子换成根,所以对于每个点要维护最大儿子和次大儿子。
以上是关于退役前的一句话题解的主要内容,如果未能解决你的问题,请参考以下文章