題目
就當那個判斷乙個州不合法的條件是存在尤拉迴路吧
一張無向圖存在尤拉迴路的條件是
圖連通不存在度數為奇數的點
於是我們列舉每乙個子集,可以在\(o(2^nn^2)\)的時間內判斷乙個集合是否能獨立成為乙個州
之後我們設\(dp_i\)表示選取狀態為\(i\)的時候的答案,\(s_i\)為這個狀態對應的城市的人口之和
於是就有
\[dp_i=\sum_ dp_j(\frac})^p
\]我們可以列舉子集轉移,於是複雜度\(o(3^n)\)
#include#include#include#include#define re register
#define ll long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define lb(x) ((x)&-(x))
const int mod=998244353;
const int maxn=(1<<21)+1;
inline int read()
struct ee[2222];
int n,num,m,p,s,len;
int fa[22],sz[22],c[22],w[22],head[22];
ll s[maxn],dp[maxn],g[maxn],inv[100*22];
int f[maxn];
inline void add(int x,int y)
inline int find(int x)
inline void merge(int x,int y)
int t=0;
for(re int i=1;i<=n;i++) dp_js_k^p}
\]也就是
\[dp_is_i^p=\sum_dp_js_k^p
\]\(b_i\)表示\(i\)這個狀態\(1\)的個數
滿足這兩個條件我們就可以認為\(j\)是\(i\)的乙個子集,同時\(k\)是\(j\)關於\(i\)的補集了
看起來有點像或卷積啦,但是有了那個限制條件看起來又不是很好做
但是我們發現我們可以強行一下,就是對於每一種\(b_i\)分別來做
考慮當前我們求得是\(b_i=t\)的\(dp_i\)的值,從小到大列舉\(t\)的值
我們把\(s_i^p\)和\(dp_i\)按照\(b_i\)分別存好,之後\(fwt\)變換一下
我們可以列舉\(b_j\)的取值,那樣相應的\(b_k=t-b_j\),之後我們利用已經得到的\(fwt\)陣列直接對應求積就好了
但是我們這樣求得是\(dp_i\times s_i^p\),我們求完一種\(t\)就要把這個陣列給\(fwt\)回來,乘上\(s_i^p\)的逆元,再\(fwt\)回去,因為之後還需要用
由於我們強行列舉\(b_i\)的取值,所以複雜度是\(o(2^nn^2)\)
**#include#include#include#include#include#define re register
#define ll long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define lb(x) ((x)&-(x))
const int mod=998244353;
const int maxn=(1<<21)+1;
inline int read()
std::vectorv[22];
struct ee[2222];
int n,num,m,p,s,len;
int fa[22],sz[22],c[22],w[22],head[22];
int s[maxn],inv[100*22];
int a[22][maxn],b[22][maxn];
int f[maxn],cnt[maxn];
inline int calc(int t)
inline int inv(int t)
inline void add(int x,int y)
inline int find(int x)
inline void merge(int x,int y)
int t=0;
for(re int i=1;i<=n;i++)
for(re int i=1;i<=n;i++) fwt(a[i],1);
fwt(b[0],1);fwt(b[1],1);
for(re int i=2;i<=n;i++)
if(i!=n) fwt(b[i],1);
} printf("%d\n",b[n][len-1]);
return 0;
}
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 州區劃分
題面給一張帶點權的無向圖 要求對其劃分為聯通且不存在尤拉迴路的多個子圖 定義乙個子圖的貢獻是 第 i 個子圖的點權和佔前 i 個子圖的點權和的比例的 p 次冪 定義乙個劃分的貢獻是 該劃分下所有子圖的貢獻的乘積 求所有劃分的貢獻之和 設 f s 為選取點集為 s 時所有劃分的貢獻和 有 f s fr...