JZOJ 5398. 【NOIP2017提高A组模拟10.7】Adore 题解
题目大意
给你一个 n n n层 D A G DAG DAG,有向无环图,然后改变第 i i i层可以将 ( ( i , j ) , ( i + 1 , k ) ) ((i,j),(i+1,k)) ((i,j),(i+1,k))这条边变成 ( ( i , k ) , ( i + 1 , j ) ) ((i,k),(i+1,j)) ((i,k),(i+1,j)),问有多少种方法使路径数为偶数。
解题思路
设
f
i
,
j
f_{i,j}
fi,j表示第
i
i
i层路径数奇偶性状态为
j
j
j的方案数,
a
i
a_i
ai表示第
i
i
i层到第
i
+
1
i+1
i+1层的状态,
p
p
p表示第
i
i
i层到第
i
+
1
i+1
i+1层,
i
+
1
i+1
i+1层的状态。
然后就转移
f
i
,
p
=
∑
f
i
−
1
,
j
f_{i,p}=\sum{f_{i-1,j}}
fi,p=∑fi−1,j
可以通过
j
j
j求出
p
p
p。
假如第
i
i
i层的路径数是偶数,那么第
i
+
1
i+1
i+1层是偶数。反之为奇数。
所以我们得到
p
=
∑
a
l
&
j
m
o
d
2
=
1
2
l
p=\sum_{a_{l}\&j\mod2=1}2^l
p=∑al&jmod2=12l。
取反类似。
然后就在
O
(
n
k
2
k
)
O(nk2^k)
O(nk2k)时间内做出来,要卡常。
important code
我用了滚动数组,嘿嘿!