題目傳送門
題目大意:有一張 n
nn 個點 m
mm 條邊的圖,你要將所有點劃分為若干組,每組內的點不能形成尤拉迴路,第 i
ii 組的貢獻為:這組內 w
ww 之和佔前 i
ii 組的 w
ww 之和的百分比的 p
pp 次冪,乙個劃分方案的貢獻問所有組的貢獻之積,求所有劃分方案的貢獻和。
判斷尤拉迴路只需要看度數是否都為偶數即可,這個相信大家都會。
然後 p
pp 是沒什麼用的。
不難得出dp方程:fsf_
fs 表示 s
ss 集合內的點的所有劃分方案下的貢獻和,則有 fs=
∑s′∈
sfs′
gs⊕s
′∑i∈
sw
if_s=\dfrac f_g_} w_i}
fs=∑i
∈sw
i∑s
′∈s
fs′
gs⊕s
′,其中 gs=
∑i∈s
wi
g_s=\sum_w_i
gs=∑i
∈sw
i,如果 s
ss 這種劃分存在尤拉迴路,那麼 gs=
0g_s=0
gs=0。
然後一開始的我就比較菜,不太懂如何處理 f
sf_s
fs 在轉移完後要除以 ∑i∈
sw
i\sum_w_i
∑i∈sw
i,結果最後類似分治fft寫了個分治子集卷積,千辛萬苦調出來,一測極限資料,跑得比 3
n3^n
3n的dp還慢……當然真在考場上是不敢打這種操作的,也就平時皮一下。
正解的姿勢就很優秀,直接將 f
ff 與 g
gg 跑子集卷積,設 fi,
sf_
fi,s
表示子集卷積中存 f
ff 的陣列,注意到 f
if_i
fi 都是由比 i
ii 小的 f
jf_j
fj 貢獻來的,也就是說,當比他小的 f
jf_j
fj 處理完了,它逆變換一下之後得出來的值就是正確的了,此時你將其逆變換後令 fi,
sf_
fi,s
除以 ∑p∈
sw
p\sum_w_p
∑p∈sw
p,然後正變換回去再貢獻 i
i< k 的 f kf_k fk 即可,這樣複雜度就是 o(n 22n) o(n^22^n) o(n22n ) 的了。 **如下:#include
#include
#include
#include
using
namespace std;
#define mod 998244353
#define bin(x) (1<<(x))
int n,m,p,w[30]
;struct edgee[
10010];
int first[30]
,len=0;
void
buildroad
(int x,
int y)
;first[x]
=len;
}void
add(
int&x,
int y)
void
dec(
int&x,
int y)
intksm
(int x,
int y)
namespace b
void
link
(int x,
int y)
void
fmt_or
(int
*f,int lg,
int type=0)
}int ws[
1<<21]
,invws[
1<<21]
,f[22][
1<<21]
,g[22][
1<<21]
;void
main()
for(
int s=
1;s<(1
<;s++
)for
(int i=
0;i(s>>i&1)
}if(sz>
1)v=
true;if
(!v)ws[s]=0
;}for(
int i=
0;i<(1
<;i++
) g[cnt[i]
][i]
=ws[i]
,f[0
][i]=1
;for
(int i=
1;i<=n;i++
)fmt_or
(g[i]
,n);
for(
int i=
1;i<=n;i++
)printf
("%d"
,f[n][(
1<])
;return;}
}int
main()
for(
int i=
0;i)scanf
("%d"
,&w[i]);
b::main()
;return0;
}
WC2018 州區劃分
點此看題 設d p s dp s dp s 為選出來的點狀壓為s ss,所得到的滿意度總和,轉移 d p s 1 f s i s dp i g s i dp s frac sum dp i times g s i dp s f s 1 i s d p i g s i 其中f s f s f s 是w...
WC 2018 州區劃分
給乙個無向圖 g v,e 滿足 v 21 對於某一種將 g v,e 劃分為k個的有序集合方案,若每乙個子集 g i v i,e i e i 都不存在尤拉迴路,則會對答案貢獻為 其中,x 為集合元素,w x 為元素 x 的權值。題解 被題意坑成cu 我還是太菜了 其實很顯然我們會得到乙個 dp 設 f...
WC2018 州區劃分
題目 就當那個判斷乙個州不合法的條件是存在尤拉迴路吧 一張無向圖存在尤拉迴路的條件是 圖連通不存在度數為奇數的點 於是我們列舉每乙個子集,可以在 o 2 nn 2 的時間內判斷乙個集合是否能獨立成為乙個州 之後我們設 dp i 表示選取狀態為 i 的時候的答案,s i 為這個狀態對應的城市的人口之和...