T1:
对无向图每条边定向,使新图为DAG的方案数。
1<=n<=40
考虑容斥dp
每次选取一个独立集加进去,然后给边定向。
发现会算重,于是给一个−1∣V∣+1-1^{|V|+1}−1∣V∣+1的系数,可以用∑i=1nCni∗(−1)i=1\sum_{i=1}^nC_{n}^i*(-1)^i=1∑i=1nCni∗(−1)i=1来感性理解。
T2:
即每条长度的链有多少条和上一次分裂后的两条链的长度是多少,暴力hash+宽搜即可。
因为状态只有5w+,复杂度O(5w∗36)O(5w*36)O(5w∗36)
T3:
先判断有没有解?
有一个greedy做法:
区间按最端点排序,一次确定1…n每个点分配的区间。
每次就取左端点<=它的,右端点最小的和它匹配,并删掉,用堆维护。
考试这里居然直接排序匹配,没有用堆维护,然后后面全部挂了。
然后思考对i这个点换一个区间,换了之后有解的条件是什么。
设R[i]表示区间左端点<=i的个数。
不然发现只要使所有i-R[i]一直保持>=0即可。
可以用线段树维护这个过程。
T4:
扫描线+树链剖分+不下传标记线段树
T5:
大概要求这个:
(ax+b)/ki+1 mod ki<=c(ax+b)/k^{i+1}~mod~k^i<=c(ax+b)/ki+1 mod ki<=c
(ax+b)/ki+1<(ki∗(c+1))(ax+b)/k^{i+1}<(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+b−ki∗(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分呜呜)
发现总是距离正解差一丢丢,再接再厉。
本文深入探讨了算法竞赛中各类问题的解决策略,包括无向图转DAG的计数问题,链状结构的搜索与匹配,以及区间分配的贪心算法等。通过对具体题目实例的分析,提供了一种容斥DP、贪心匹配和线段树维护等多种算法思路。
738





