几道随机化题

随机大法好,乱搞出奇迹。

 

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

 

 

posted @ 2014-07-13 18:46  FancyCoder0  阅读(1047)  评论(0编辑  收藏  举报