WC2018 州區劃分

2022-03-27 01:20:08 字數 2435 閱讀 7314

題目

就當那個判斷乙個州不合法的條件是存在尤拉迴路吧

一張無向圖存在尤拉迴路的條件是

圖連通不存在度數為奇數的點

於是我們列舉每乙個子集,可以在\(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...