Processing math: 100%

[BZOJ 1449][JSOI2009]球队收益

二次函数费用流的入门题……我真太弱了……

可以给比赛、队伍都建点,然后S向每个比赛连容量为1的边,每个比赛向队伍连容量为1的边,来表示赢家是谁。这样一来一次比赛只有一个队伍赢了。

考虑怎么处理那个二次函数费用。费用函数为f(x,y)=Cx2+Dy2,由于一个队伍的总比赛次数是已知的,所以y不需要,不妨假设一个队伍有t场比赛,则费用函数为f(x)=Cx2+D(tx)2

对这个函数做差分:Δf(x)=f(x+1)f(x)=2Cx2D(tx)+C+D,然后这个差分是单调不降的。因此我们对所有差分都从队伍向T连边(费用为这一点的差分),这样一来的话会优先选择费用小的边,保证这个队伍的费用一直合法。

代码:

[BZOJ 1013]球型空间产生器

不行不能颓了……线代其实刚起步……

注意每个点到球心的距离相同,距离之平方亦相同。然后假设所有半径平方为,那么我们先可以列出两个方程(假设,不过此时事实上可以列三个,但出于方便讨论的目的便只列两个):

两方程作差,得:

整理,得:

对这种方法加以推广,便可列出元一次方程。高斯消元求解即可。

代码:

[BZOJ 1029]建筑抢修

废了。

我彻底废了。

就一个贪心水体。按截止时间排序然后遍历,当前花时间能干完就干,不能的话看能不能把更劣的选择换。仅此而已。

代码:

[BZOJ 1015]星球大战

这道题到现在才A……

其实……离线处理并不像我想的那样变态……

需要注意的是,离线处理过程中,在将被删除的点加入时,联通分量数可能增加(其他一个点都连不了)

代码:

继续阅读