Codeforces Round 906 (Div. 2) Doremy's Drying Plan E1.&E2

传送门

先考虑E1 只需要删除两条线使得不被覆盖的点数最多。

观察到点数只有200000 那么我们完全可以先将被至少3条线覆盖的点删掉。

考虑枚举一条线,枚举这条线覆盖的点寻找另外一条线覆盖这些点中的最大值,然后再找没覆盖这些点之外的线的最大值即可。

复杂度容易证明是线性的。

考虑E2 需要我们删除k,k10条线求出不被覆盖的点数最多。

点的数量不变,遇到这种贪心没办法解决的问题,由于点的规模很大,也不能使用网络流,只能考虑dp

设状态fi,j表示前i个点且第i个点必无覆盖已经删掉j条线的最大值。

考虑枚举上一个未被覆盖的点k 设包含i的线段数量-包含i包含k的线段数量为v fi,j=max{fk,jv}

我们可以先把那些被覆盖超过10次的点扔掉。

这样上述转移是n2k2的或者优化一步为n2k的。

考虑进一步优化这个转移式无非是求最大值

利用线段树维护即可。

注意到我们需要外层枚举j 还需要不断更改fk,jv这个东西,可以暴力的修改。

因为最多修改nk次。

总复杂度nklogn

posted @   chdy  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
历史上的今天:
2019-11-02 11 2
点击右上角即可分享
微信分享提示