估分:(60 + 80 + 0 = 140)
考场:(10 + 70 + 0 = 80)
简单三角形原来可以是凹多边形。。。
(T1)
简单三角形原来可以是凹多边形。。。
我的方法只能处理凸多边形的问题,时间复杂度(O(n^2*m+s*q))
其实就是将多边形分成多个三角形,而对于每个三角形,我们可以拆成三个其中一个节点为原点的三角形。
于是我们可以(O(n^2*m))预处理,然后输入的时候,顺着累加答案即可。
但是,简单三角形可以是凹多边形
所以一切都变了,“大人,时代变了”
听(LJ)说似乎可以用类似容斥的方法抵消掉,如果一条边的起点的极角大于终点的极角,则加上(OXY)三角形的贡献,否则减去(OXY)三角形的贡献。
拆多边形的操作还是类似的。
不过,确实如此,归纳法可以证明上述方法。
而后还有一些其他的方法,新写一个博客来讲吧。。。
(T2)
对于(m=n-1)的显然可以用点分治乱搞。
对于(m=n)的情况。。。感觉似乎可以拆一条边,然后用点分治,然后再考虑一定要经过那条被拆的边的贡献。
似乎有点难打,于是乎,弃了最后一小部分。
点分治部分考场打错了,递归(solve)进去的是找到的重心(rt),而不是(v)
对于最后一个部分,发现原来还是比较好打的。
我们可以先处理不经过特定边(其中一个环边)的答案。
然后我们在用树状数组来处理剩下的强制经过特定边的答案。
对于(1---2---3---4),假设((1,2))为特定边。
那么我们可以先将(1)子树的深度丢到树状数组中。
而后从(4)开始倒着搞,先求(4)子树必经((1,2))的答案,也就是树状数组中([K-dep-(4-1),n])的答案。
而后再修改操作,我们将(4)子树的(dep+(4-4+2))添加到树状数组中。
如此操作即可。
(T3)
考场没有话太多时间去想,ε=(´ο`*)))唉
总结
审题还是要仔细,对于简单三角形这种概念性的问题,下次一定要小心注意。
而且对于一些思考起来比较复杂的问题,一定要坚持下去,不要放弃。
还是最好每一道题都打了,这样才不会留下任何遗憾。(o(╥﹏╥)o)