日常訓練 巨神兵 obelisk

2021-07-25 22:08:51 字數 998 閱讀 4724

題意簡述:有一張

n 個點,

m條邊的有向圖,有多少個子圖(選定乙個邊集)是沒有環的。答案對1e

9+7 取模。n≤

10

考慮狀壓dp,乙個無環圖一定是可以唯一分層的,將一開始入度為

0 的點放第一層,將這些點去掉,剩下出現的新的入度為

0的點為第二層…以此類推,用f[

i][j

] 表示已經取得點集為

i ,最後一層點集為

j,列舉新的點集

k 。集合

k中的每乙個點必須至少被一條來自集合

j 的點連,但來自其他集合

i中的點到

k 的邊可以任意連。dp轉移即可。因為每個點只有

4個狀態,已被取不是最後一層,已被取是最後一層,新取的點,還未取得點,所以複雜度是o(

4nm)

。 最近轉c++,看起來神清氣爽

#include

typedef

long

long ll;

using

namespace

std;

const

int n=100,p=1000000007;

int x[n],y[n],trans[10000],a[n],n,m;

ll f[1050][1050],m2[n];

int main()

ll base = 1;

for (int l = 1;l <= n;l++)

base = base * m2[a[0]] % p;

f[i | k][k] = (f[i | k][k] + f[i][j] * base) % p;}}

ll ans = 0;

for (int i = 1;i <= all;i++)

ans = (ans + f[all][i]) % p;

printf("%lld\n",ans);

}

CSP模擬賽 巨神兵

題目 歐貝利斯克的巨神兵很喜歡有向圖,有一天他找到了一張 n 個點 m 條邊的有向圖。歐貝利斯克認為乙個沒有環的有向圖是優美的,請問這張圖有多少個子圖 即選定乙個邊集 是優美的?答案對 10 9 7 取模。對於40 的資料 n 5,m 20 對於60 的資料 n 10 對於80 的資料 n 15 對...

日常訓練 壓縮

巨大的文字往往令人頭疼,特別是文字內容有大量重複的情況下,巨大的文字不便於運輸和閱讀,於是我們提出了noip nonsense obivous index pattern 荒謬的顯然索引法 一種 有效的 壓縮文字的方法。noip壓縮後的格式很特別,乙個文字壓縮後由若干個單元組成,每個單元由3部分組成...

日常訓練 Tree

j 對於h u j 時間複雜度的證明也是比較經典了,每次列舉的是sz eu s zev 相當於每次從a,b 中各任選一點,它們的lc a 為 u 這樣的點對列舉不會重複,因此總的時間複雜度為o n2 include include include include include using name...