2022.07.11 zrNOI模拟赛总结

1.时间安排

8:00~8:20

T1:看上去像线性规划问题,又或者是个费用流,送了10分,没subtask也许能乱搞出奇迹。

T2:网络流题(一开始看错题面了)给若干次询问每次一个大小为k的点集求集合内最小割?感觉不可做。

T3:DP题,只会20分搜索。

8:20~8:40

一开始题面错了,求最大打成了最小,怎么推T1都推不对,大胆问了一下dls才知道题面错了……然后写了10分暴力。

8:40~9:00

写了T3的爆搜,跑的比较慢,加了一些位运算优化已经小卡常,极限数据跑的也没问题,交上去没再管。

9:00~10:30

才发现自己弄错了题意,暴力就是裸的dinic,而且图随机加一些玄学优化似乎能拿40~50分的样子。

光速打了个板子,本来想打一些优化的东西,改着发现答案错了,而且跑大样例似乎还不如裸的dinic,交上去就不管了。

10:30~12:00

想T1怎么做,线性规划不会,网络流没法限制同一个点增广出来的流量必须相同,很寄。

于是开始想玄学贪心,发现似乎是一个类似子集的东西,直接正序枚举可以发现当前枚举到的集合他的所有子集已经处理好,于是考虑如何计算当前的覆盖操作取多少最优。

值域太大,直接枚举肯定寄,二分似乎不具有单调性,一想这个东西似乎必须同时揭掉上一次覆盖的最浅的那一层,加上一些玄学贪心比较,样例居然对了,交上去就不管了。

12:00~13:00

开摆。

result:

T1:10 T2:50 T3:0(字符串转二进制把0位忘了……)

2.反思

T1:

前置题

用到了类似数位DP的背包,第一次见。

\(dp[i]\) 表示背包容量还剩 \(i\) 时之前装的东西带权最大值。

通过和前置题很像的方法,二进制拆分值域后从高位到低位dp,像正常的背包转移,即可拼出来完整的物品。

\(dp[0]\) 就是答案。

注意到当前为的和不可能超过10,可以省掉不少无用的转移,加一些可行性剪枝后即可通过(反正数据范围很小)。

T2:

二进制拆分最小割,之前二进制拆分的图论题只见过最短路,第一次见到套在最小割上。

考虑把询问集合按下标二进制拆分,对每一位拆开(1连源0连汇)后跑最小割,记录下每个点在当前位匹配源还是汇。

会发现对于一个询问点 \(x\),只需要跑属于同一个源汇匹配状态的点集的最小割即可,证明的话出题人说如果出现分界重合的话缩小范围一定不会让答案变差,感性理解很对。

一共需要跑 \(O(logk)\) 次dinic,因为图随机,可以通过。

T3:

居然是斜率优化,完全看不出来。

还不懂,回来再补

(待upd)

posted @ 2022-07-11 20:51  Displace  阅读(74)  评论(0)    收藏  举报