T1:
对无向图每条边定向,使新图为DAG的方案数。
1<=n<=40
考虑容斥dp
每次选取一个独立集加进去,然后给边定向。
发现会算重,于是给一个 − 1 ∣ V ∣ + 1 -1^{|V|+1} −1∣V∣+1的系数,可以用 ∑ i = 1 n C n i ∗ ( − 1 ) i = 1 \sum_{i=1}^nC_{n}^i*(-1)^i=1 ∑i=1nCni∗(−1)i=1来感性理解。
T2:
即每条长度的链有多少条和上一次分裂后的两条链的长度是多少,暴力hash+宽搜即可。
因为状态只有5w+,复杂度 O ( 5 w ∗ 36 ) O(5w*36) O(5w∗36)
T3:
先判断有没有解?
有一个greedy做法:
区间按最端点排序,一次确定1…n每个点分配的区间。
每次就取左端点<=它的,右端点最小的和它匹配,并删掉,用堆维护。
考试这里居然直接排序匹配,没有用堆维护,然后后面全部挂了。
然后思考对i这个点换一个区间,换了之后有解的条件是什么。
设R[i]表示区间左端点<=i的个数。
不然发现只要使所有i-R[i]一直保持>=0即可。
可以用线段树维护这个过程。
T4:
扫描线+树链剖分+不下传标记线段树
T5:
大概要求这个:
(
a
x
+
b
)
/
k
i
+
1
m
o
d
k
i
<
=
c
(ax+b)/k^{i+1}~mod~k^i<=c
(ax+b)/ki+1 mod ki<=c
(
a
x
+
b
)
/
k
i
+
1
<
(
k
i
∗
(
c
+
1
)
)
(ax+b)/k^{i+1}<(k^i*(c+1))
(ax+b)/ki+1<(ki∗(c+1))
(
a
x
+
b
)
/
k
i
+
1
−
(
a
x
+
b
−
k
i
∗
(
c
+
1
)
)
/
k
i
+
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 = l o g k 1 e 18 i=log_{k}^{1e18} i=logk1e18时, k i + 1 k^{i+1} ki+1爆long long,发现是最后一位,所以不需要 m o d k i mod k^{i} modki,可以直接统计。
T6:
考虑从大区间转移到小区间。
就是线段树可以维护的事了(小转移到大只有10分呜呜)
发现总是距离正解差一丢丢,再接再厉。