码迷,mamicode.com
首页 > 其他好文 > 详细

退役前的做题记录

时间:2019-12-19 09:26:16      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:分配   01背包   使用   queue   答案   code   就是   维护   usaco   

2019.12.17

2019.12.18

codechef STICNOT

问题等价于给每条边和每个点分配一个权值,使得点权\(\geq\)相邻边权

考虑将边权从大到小插入,插入第一条边的时候,我们也就确定了其两端的点的点权的最小值。接下来放第二条边的时候,肯定将其放在与第一条边有公共点的位置是最优的,因为公共点的点权一定是大于等于该边边权的,也就是这条边只确定了一个点点权的最小值。

一直做下去,问题就变成了第一条边确定两个点的最小值,之后每条边确定一个点的最小值,求最小修改数使其合法。直接贪心即可,最后还可以发现这个问题和树的形态结构无关

luogu5242 [USACO19FEB]Cow Dating

暴力就是求\(\sum_{i=l}^rp_i\prod_{j=l,j\neq i}^r(1-p_j)\)的最大值。

\(pro_i=\prod_{j=1}^i(1-p_j)\),则所求为\(\frac{pro_r}{pro_{l-1}}\sum_{i=l}^r\frac{p_i}{1-p_i}\);再记\(sum_i=\sum_{j=1}^i\frac{p_j}{1-p_j}\),则所求为\(\frac{pro_r(sum_r-sum_{l-1})}{pro_{l-1}}\).

假设当前最优解区间为\([l,r]\),固定左端点,将右端点向右移时若要使得答案更优,整理可以得到\(sum_r-sum_{l-1}<1\)。枚举\(l\)同时维护最右的指针即可。注意开long double

luogu5243 [USACO19FEB]Moorio Kart

对每棵树找出所有的路径长度方案数和该长度的所有方案的长度和。之后暴力dp合并,注意中间省去每棵树种不存在的长度貌似可以做到\(O(NY\sqrt Y)\).最后乘上圆排列的系数

CF1266D Decreasing Debts

要使\(\sum d\)最小每个人只能有一条出边或一条入边。同时再加上可以随便指,便可以预处理出每个人最终的收支情况,支出的向收入的连边即可

CF1266E Spaceship Solitaire

所有的优惠方案都是一定可以达成的,map维护\((s,t,u)\),每次修改的时候暴力\(+1\)\(-1\)即可

luogu4377 [USACO18OPEN]Talent Show

首先01分数规划,之后记\(f_i\)表示\(\sum w=i\)时的最大权值和。注意到\(\sum w\)至多在\(W=1000\),大于的直接看做\(W\),于是直接01背包就完事了

luogu4376 [USACO18OPEN]Milking Order

二分答案+toposort判断是否合法,最后拿优先队列再跑一遍toposort求答案,注意二分答案的时候使用普通的queue使得复杂度是一个\(\log\)

luogu4374 [USACO18OPEN]Disruption

将所有的新边按照边权从小到大排序,注意到对每条新边\((u,v,w)\),只有原树中删去在路径\((u,v)\)上的边的时候才能把这条边加入从而形成一棵新树。于是暴力并查集合并就可以了(类似于LOJ3040的合并方法)

退役前的做题记录

标签:分配   01背包   使用   queue   答案   code   就是   维护   usaco   

原文地址:https://www.cnblogs.com/encodetalker/p/12064767.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!