UOJ37 清華集訓2014 主旋律

2022-03-25 16:52:06 字數 866 閱讀 6314

link

然後列舉縮點之後的dag的情況,考慮計算可行的邊集方案數,再遞迴乘上所有scc的匯出子圖的答案。

計算可行的邊集方案數可以考慮dp,設\(f_s\)表示點集\(s\)的匯出子圖中使得子圖形成乙個dag的邊集方案數,那麼可以得到轉移

\[f_s=\sum\limits_(-1)^f_2^}

\]其中\(cnt_\)表示的是起點在\(s\)中,終點在\(t\)中的邊數。

\((-1)^\)是容斥係數,因為我們不能保證每個點都連出至少一條邊,直接計算會算重。

不難發現子集\(t\)的貢獻係數僅與其scc數量的奇偶性有關,奇數為正偶數為負。

那麼我們就沒有必要列舉縮點後的結果了,設\(f_s\)表示\(s\)的匯出子圖中使得圖強聯通的邊集方案數,\(g_s,h_s\)表示\(s\)的匯出子圖中的使得圖中形成奇/偶個scc,且scc之間相互沒有邊的邊集方案數。

那麼我們有

\[f_s=2^}-\sum\limits_(g_t-h_t)2^+cnt_}\\

g_s=\sum\limits_f_th_\\

h_s=\sum\limits_f_tg_

\]\(s=t\)的部分先轉移\(f\)再轉移\(g,h\)即可。

#includeusing i64=long long;

const int n=1<<15,p=1000000007;

i64 to[n],e[n],f[n],g[n],pw[256];

int read()

void dec(i64&a,i64 b)

int calc(int s,int t)

int main()

printf("%lld",f[(1<}

UOJ37 清華集訓2014 主旋律

設 f s 為點集 s 中強連通生成子圖的方案數,cnt s 為點集 s 構成的誘導子圖中邊的個數。考慮用 2 減去不合法方案數來計算 f s 不合法情況即為縮點後為 dag 設 h s 為點集 s 縮點後構成點數 1 的 dag 的方案數。考慮列舉乙個點集 t 其由若干個出度為 0 的強連通分量構...

UOJ 42 清華集訓2014 Sum

首先把底數 1 消掉 1 n 1 2 times n 2 1 2 times n lfloor frac n 2 rfloor times 2 令 k sqrt r 所以原式等於 begin sum limits n 1 sum limits n 1 2 times lfloor ik rfloor...

清華集訓 2014 玄學

update text update 我之前講的是個什麼鬼 如果想看看人話版本 戳這。感覺自己被坑騙了。題目明明寫了所有資料不超過int,敢情是輸入資料不超int?迷惑行為 題目感覺有點繞,我盡量 不口胡。首先我們搞一顆線段樹1,樹表示插入序列的編號。如,在q行中第i個出現插入操作 其實拿到這道題我...