poi2011 切题记

18th Polish Olympiad in Informatics

Tasks

Conspiracy (Stage I) (100/100)
Lollipop (Stage I) (100/100)
Lightning Conductor (Stage I) (100/100)
Shift (Stage I) (100/100)
Plot (Stage I) (100/100)
Strongbox (Stage II - day 0) (100/100)
Difference (Stage II - day 1) (100/100)
Garbage (Stage II - day 1) (100/100)
Tree Rotations 2 (Stage II - day 2) (100/100)
Tree Rotations (Stage II - day 2) (100/100)
Temperature (Stage II - day 2) (100/100)
Dynamite (Stage III - day 0) (100/100)
Party (Stage III - day 1) (100/100)
Inspection (Stage III - day 1) (100/100)
Periodicity (Stage III - day 1) (100/100)
Meteors (Stage III - day 2) (100/100)
Sticks (Stage III - day 2) (100/100)
Programming Contest (Stage III - day 2) (100/100)

         终于切完啦~~~

Conspiracy 2-Set问题。把一个人拆成x0和x1,x0表示support team。x0和x1连边。然后如果x和y认识将x1和y0连边;否则把x0和y1连边。然后跑出一组合法解后看能不能调整,显然只能调整1个人,枚举一下即可。

Lollipop 首先找到1-x使得它们中所有数的和>要求的那个数,然后找到1后面第一个W和x后面第一个W,移过去即可或者无解。

Lightning Conductor 首先令j<i;然后再反过来做一遍。显然满足决策单调性,先找出中点的决策点然后分治解决即可。

Shift 首先固定1的位置;考虑现在把i放到它应该在的位置上,可以用a先把它搞到最上面,然后往上跳两步;重复若干次就可以放好了。最后两个数可能会出现无解的情况。

Plot 二分答案,然后贪心地找。具体可以用倍增,然后求一个类似于最小圆覆盖的随机增量法。但是直接用最小圆覆盖会被卡常数,要用二分出的那个半径去尝试覆盖所有点。

Strongbox 数论题。如果x是密码且y是密码,显然任意gcd(x,y,n)的倍数都是密码;我们现在已知x,也就是求最小的y|n且y|x,使得不存在y的倍数不是密码。此时n/y就是答案。

Difference 假设统计(i,j]中(a,b)的差,就是sa[j]-sa[i]-sb[j]+sb[i]=(sa[j]-sb[j])-(sa[i]-sb[i]),也就是维护一个[a][b]表示a和b的颜色差,那么用[a][b]的当前值-[a][b]历史最小值(合法的话)更新答案。显然每次更新后只会变26个,且只有26个可以更新答案。时间复杂度O(26N)

Garbage 把0,1那个属性不同的边连起来然后跑欧拉回路

Tree Rotations 2 统计当且节点左子节点对右子节点的逆序对数量,如果交换会变少就交换。用树状数组维护一些东西即可。O(Nlog^2N),比标称的O(NlogN)线段树合并快多了。

Tree Rotations 上一题的弱化版

Temperature 单调队列维护一下即可。

Dynamite 首先二分答案,然后贪心往里面加点。然后每个点x有三种状态:有一个距离x为t的点没有被覆盖;没有点未被覆盖且x所在子树有个点可以向外延伸长度为t;不能延伸也唯有未被覆盖的点。dfs一下即可。

Party 如果x和y没有边连,显然存在一个不再大团中,把x和y都删掉即可。

Inspection 如果去掉x后有个连通块大小超过n/2就无解;否则维护一些东西然后讨论一下即可。

Periodicity 神构造题。可以百度vfleaking的题解。

Sticks 整体二分经典题。

Programming Contest 直接费用流建图会被卡常数。。注意到它其实是一个类似于二分图的玩意,用二分图匹配的方法来跑即可。

       代码戳->    

你可能感兴趣的:(分治,图论,网络流,二分,构造)