CSP模擬賽 巨神兵

2022-09-11 00:39:30 字數 998 閱讀 7960

題目

歐貝利斯克的巨神兵很喜歡有向圖,有一天他找到了一張\(n\)個點\(m\)條邊的有向圖。

歐貝利斯克認為乙個沒有環的有向圖是優美的,請問這張圖有多少個子圖(即選定乙個邊集)是優美的?

答案對\(10^9+7\)取模。

對於40%的資料\(n≤5,m≤20\)

對於60%的資料\(n≤10\);

對於80%的資料\(n≤15\);

對於100%的資料\(n≤17\)。

思路考場上只會寫列舉邊集的純暴力,後來發現自己蠢爆了。

首先這題的關鍵在於如何設計出乙個演算法,把複雜度堆在點數上而不是邊上,之後所做的工作都是在此基礎之上進行優化。

看看在40分的暴力中,判環時用了拓撲排序,考慮以拓撲排序為基礎對原圖分層。

p60定義\(dp[i][j]\)表示當前已經使用了哪些點,最後一層有哪些點,一層層的轉移,每一層內部不能有邊,層與層之間的邊可選可不選。

struct p60

struct p60

void solve()

add(dp[i|k][k],tmp*dp[i][j]%mod);}}

} int ans=0;

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

add(ans,dp[base][i]);

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

}}p60;

struct p100

void solve()}}

int to=(base^i);

for(int t=(to&(to-1));;t=(t-1)&to)

} printf("%d\n",dp[base]);

}}p100;

int main()

p100.solve();

return 0;

}

日常訓練 巨神兵 obelisk

題意簡述 有一張 n 個點,m條邊的有向圖,有多少個子圖 選定乙個邊集 是沒有環的。答案對1e 9 7 取模。n 10 考慮狀壓dp,乙個無環圖一定是可以唯一分層的,將一開始入度為 0 的點放第一層,將這些點去掉,剩下出現的新的入度為 0的點為第二層 以此類推,用f i j 表示已經取得點集為 i ...

CSP模擬賽 方程(數學)

題目描述 求關於x的方程 x1 x2 xk n的非負整數解的個數。輸入格式 僅一行,包含兩個正整數n,k。輸出格式 乙個整數,表示方程不同解的個數,這個數可能很大,你只需輸出mod 20080814 的結果。輸入樣例 1 1輸出樣例1提示 資料範圍 對於50 的資料,n,k 300 對於80 的資料...

CSP模擬賽 方程(數學)

求關於x的方程 x1 x2 xk n的非負整數解的個數。僅一行,包含兩個正整數n,k。乙個整數,表示方程不同解的個數,這個數可能很大,你只需輸出mod 20080814 的結果。1 11 提示資料範圍 對於50 的資料,n,k 300 對於80 的資料,n,k 1000 對於100 的資料,n,k ...