POI看题记录+题解
前言
听了dottle的博客,这一周就练习推性质,题目就是从POI的蓝题起步,然后挨道往后刷
要求:每道题先想,然后看题解,总结性质,写博客
然后每天至少保证专注6h,1h3题,再写一两道喜欢的题练练手
时间:2025.8.25——8.31
8.25
P3536
建议直接看简化题意
先考虑暴力:
一个确定的 \(a_i\),遍历一下在 1e6 内 \(a_i\) 的倍数,最多会遍历 \(1e6/a_i\) 次
然后考虑到对于 \(a_i\) 相同的顾客是先从小的枚举到大的,所以可以记录一下和上一个相同 \(a_i\) 枚举到哪里,就可以保证对于 1e6 内的每一个数至多能占用 \(1e6/a_i\) 次
然后就是非常经典的势能分析了
\(\sum_{i=1}^n n/i=nlogn\)
P3545
直接秒了,反悔贪心
首先因为发现每个顾客的贡献是相同的,所以贪心的将一个需求大的顾客换成需求小的顾客是不劣的
然后题目还有限制,要求每一个时刻都满足总价值不大于某一个数,那我就反悔贪心,如果超了大根堆弹掉最大的,保证每一时刻的贪心都正确
P3421
没看懂题目
P2314
没看懂题解
P3452
问题转化成了,判断原图的反图的连通块数量
然后可以观察到对于一个点所有和它不相邻的点都和它在反图上在同一连通块内,然后考虑到一个一个连通块操作,对于一个x,找到所有没被访问过且不与x相连的边加入一个队列(维护连通块),至于没被访问的点用一个链表维护
具体复杂度为什么正确我没太想明白
P3459
我先想到的是能不能树上差分做,是不能的
因为树上差分实际上维护的是单点的值,这里想要维护一个前缀值
发现一个位置被修改之后,能改变的它子树中的所有的前缀值
自然联想到dfs序,树状数组直接秒掉

浙公网安备 33010602011771号