20220219省选组总结
作者:互联网
T1 树形图求和
貌似跟之前一道省选题几乎一样?
首先想的是对每条边统计其所在的树形图个数,乘上边权后相加。
会用到矩阵树定理求树形图个数。
但这样是 \(O(m n^3)\) 的,显然过不了。
题解做法是快速维护余子式?
根本没有想到这一边,想到了也不会维护(bushi
嗯。。。考虑将原本矩阵中的 度数 或者 边数 改成双元组,即将一条边的贡献变为 \(wx + 1\) (\(w\) 为边权) 的形式。答案是矩阵行列式的 \(x^1\) 项系数。
如何理解?
考虑如果只计算一条边时是如何求答案的。
若一个树形图中包括该边,才会被计算到答案里面,那么如果把该边的 1条 变成 权值 条 ,算出来的也就是该边的贡献。
\(x^1\) 项保证了只有一条边的贡献是边权。
讲到这里应该都明白了吧?还是提多一嘴。
由于求 det 需要高斯消元,一般都会想直接将多项式当成原本的方程系数来消元,这就需要用到多项式求逆了(虽然只有两项简单的很?)
实际上完全不需要求逆(我根本没写多项式……),只用对常数项高斯消元即可。
但是这个高斯消元需要额外步骤,其实就是不仅仅求出下三角矩阵,我们只保留一条对角线,其他位置的常数项要求全部为 \(0\) 。
为什么?
由于我们只会取一个一次项,此时若在对角线外取了数,则有至少两个数不在对角线上,这些数中至多只有一个能取一次项,于是必有常数项 \(0\) 会被取到,也就没有贡献了。
这样真的好写很多。。。
T2 旅行
还没敲。。。
首先是二分答案,由于题设,旅行一定是按dfn序做的。
那么我们对每个点维护二元组 \((a,b)\) 的集合表示第一天 \(a\) 最后一天 \(b\)。
对于所有 \((a,b), (a',b')\) ,若有 \(a \le a' , b \le b'\) ,\((a',b')\) 显然不优,就没必要存在了。
合并儿子时使用启发式合并,根据某种方式排序后就可以前缀最小值+双指针了吧。
排序什么的可以用归并可以保证复杂度是 \(O(n \log n \log Ans)\) 的,或者直接 sort 多个 \(\log\) 貌似也能硬刚。
T3 字符串游戏
先倒着扫一遍判合法性并找出二元组 \((a_i,b_i)\) 表示 \(a_i\) 要移动到 \(b_i\) 的位置。
做完第一次操作后一定是由这些 \(a_i\) 组成的字符串。
然后设 \(v_i\) 表示做完第一次后 可以提供的位置数 , 需要保证能覆盖到对应最左侧的需求位并至少留下一个位置(防止灭种)。
那么每一次操作相当于将 \(v_i\) 往前贡献一次,这样的贡献是会保留下来继续对前面造成影响的。
会不会有贡献多了的情况,比如到达了 \(b_i\) 后继续将后面的贡献转移到后面?
不会,原因是当 \(b_i\) 该过程完成了,前面得到的可行位置就是该过程前的所有位置了,前面的答案也不可能更大。
标签:总结,20220219,log,位置,矩阵,树形图,贡献,省选组,高斯消 来源: https://www.cnblogs.com/Kelvin2005/p/15913060.html