首页 > 代码库 > 几道随机化题
几道随机化题
随机大法好,乱搞出奇迹。
pro:给一个n*m的网格,每个格子上有一种颜色或障碍,求最小的不含障碍的联通块包含至少k个颜色。
n,m<=100 color<=n*m k<=5
sol:对于color比较小的情况,比如color=k,就是一个裸的斯坦纳树。然后我们每次将所有颜色随机分到k个盒子里,一个盒子都染成相同颜色,然后按上述方法做,取最小值。每次做解是可行的,是最优解的情况是刚好随机到最后答案的颜色在不同盒子里,大概就是k!/(k^k)。
pro:给一张无向联通图,问删去两条边使图不连通的方案数。 n,m<=10^5
sol:先搞一颗生成树,对于所有非树边随机一个权值,然后将其覆盖的树边都xor上这个值,最后拥有相同权值的边对或者其中有权值是0的(割边)就是可行的。
但这题是有确定性做法的。
pro:给一个多重集合的比较方法:看最小的出现次数不相同的元素在哪里就哪边小。给一个序列,问其中连续子序列形成的多重集合的第k大(相同的也算多次)。(n<=10^5,k<=n*(n+1)/2)
sol:如果给一个集合,求<=它的个数是比较好做的。注意到左端点固定,集合大小随右端点是递增的。用堆维护即可。
然后每次在所有可行区间里随机找一个区间作为二分界,然后算可行的右端点范围。就没了。期望是O(Nlog^2N)的。
pro:求最大团。
sol:随机一个顶点序列,然后贪心能加就加。可以用bitset优化。
今年WF有一题,不过那题有确定性算法,不过这样居然能过!
CF也有不少用随机化的思想的题,感觉都挺赞的。
444B DZY Loves FFT
442E Gena and Second Distance
#213 Div1D Ghd