浙江集训(4.17-4.18)

本文深入探讨了算法竞赛中各类问题的解决策略,包括无向图转DAG的计数问题,链状结构的搜索与匹配,以及区间分配的贪心算法等。通过对具体题目实例的分析,提供了一种容斥DP、贪心匹配和线段树维护等多种算法思路。

T1:
对无向图每条边定向,使新图为DAG的方案数。

1<=n<=40

考虑容斥dp

每次选取一个独立集加进去,然后给边定向。

发现会算重,于是给一个−1∣V∣+1-1^{|V|+1}1V+1的系数,可以用∑i=1nCni∗(−1)i=1\sum_{i=1}^nC_{n}^i*(-1)^i=1i=1nCni(1)i=1来感性理解。

T2:
即每条长度的链有多少条和上一次分裂后的两条链的长度是多少,暴力hash+宽搜即可。

因为状态只有5w+,复杂度O(5w∗36)O(5w*36)O(5w36)

T3:
先判断有没有解?
有一个greedy做法:
区间按最端点排序,一次确定1…n每个点分配的区间。
每次就取左端点<=它的,右端点最小的和它匹配,并删掉,用堆维护。

考试这里居然直接排序匹配,没有用堆维护,然后后面全部挂了。

然后思考对i这个点换一个区间,换了之后有解的条件是什么。

设R[i]表示区间左端点<=i的个数。

不然发现只要使所有i-R[i]一直保持>=0即可。

可以用线段树维护这个过程。

T4:
扫描线+树链剖分+不下传标记线段树

T5:
大概要求这个:
(ax+b)/ki+1 mod ki&lt;=c(ax+b)/k^{i+1}~mod~k^i&lt;=c(ax+b)/ki+1 mod ki<=c
(ax+b)/ki+1&lt;(ki∗(c+1))(ax+b)/k^{i+1}&lt;(k^i*(c+1))(ax+b)/ki+1<(ki(c+1))
(ax+b)/ki+1−(ax+b−ki∗(c+1))/ki+1(ax+b)/k^{i+1}-(ax+b-k^i*(c+1))/k^{i+1}(ax+b)/ki+1(ax+bki(c+1))/ki+1

类欧即可,但是b’<0,要向-∞取整,但是最小不超过-1,找到最小x’使ax’+b>=0即可。

i=logk1e18i=log_{k}^{1e18}i=logk1e18时,ki+1k^{i+1}ki+1爆long long,发现是最后一位,所以不需要modkimod k^{i}modki,可以直接统计。

T6:
考虑从大区间转移到小区间。

就是线段树可以维护的事了(小转移到大只有10分呜呜)


发现总是距离正解差一丢丢,再接再厉。

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值