标签:理解 val 二分 表示 如何 生成 两种 答案 为什么
考场上打了个非常伪的算法,不知道为什么能拿50。
整道题的关键在于求出一轮中两个人的胜率之比。标程给的做法是分数规划。
考虑二分答案,设二分的值为val,那么将A胜一轮贡献作为-val,B胜一轮贡献为1,倒着dp一遍就可以得到是否存在解。
那么得到胜率之比之后,考虑如何得到最终答案。令$a_i$表示已经胜利i轮时的胜率,显然有$a_{i}=a_{i-1}*p+a_{i+1}*q$,p,q表示两个人分别的胜率。
于是直接高斯消元就可以了。
然而题解给了更高端的$O(1)$计算式,并不能理解是什么意思。
gugugu
不难想到矩阵树,然后?
不妨给每种颜色的边设个边权,为了方便,设红边的边权为1,设另外两种边的边权分别为x,y,那么在这种情况下用矩阵树定理求出来所有生成树权值之和为$\sum num_{i,j}x^{i}y^{j}$,其中num表示选两种边i,j条时的方案数。
发现这个东西是个多元方程组,所以只要带进去若干组x,y然后进行高斯消元就可以了。
如果用二维插值是$O(n^5)$,高斯消元$O(n^6)$然而常数很小,所以可以过。
标签:理解 val 二分 表示 如何 生成 两种 答案 为什么
原文地址:https://www.cnblogs.com/hzoi-cbx/p/12241539.html