SHOI2016 黑暗前的幻想鄉

2021-10-08 07:29:09 字數 1073 閱讀 4077

點此看題

好久沒有做過這麼版的題了

首先你要知道指數級容斥,也就是我們列舉乙個公司集合,表示我們只在這些公司中選邊,那麼我們就用全部公司-少乙個公司+少兩個公司…來計算就行。

知道邊算生成樹,不就是矩陣樹定理麼?

#include

#include

#include

#include

using

namespace std;

#define int long long

const

int m =20;

const

int mod =

1e9+7;

intread()

int n,m,a[m]

[m],rt,ans;

vectorint,

int>

> b[m]

;int

qkpow

(int a,

int b)

return r;

}void

guass()

int inv=

qkpow

(a[i]

[i],mod-2)

;for

(int j=i+

1;j<=n;j++)}

for(

int i=

2;i<=n;i++

) ans=ans*a[i]

[i]%mod;

ans=

(ans+mod)

%mod;

}signed

main()

} m=

1<<

(n-1);

for(

int i=

1;ians=1;

guass()

; rt=

(rt+

(cnt&1?

-1:1

)*ans)

%mod;

}printf

("%lld\n"

,(rt+mod)

%mod)

;}

SHOI2016 黑暗前的幻想鄉

幻想鄉是個什麼東西?逃 就是設 dp i 表示至多i個公司修建道路,那麼我們有 ans dp n 1 dp n 2 dp n 3 balabala 就是那個容斥公式嘛qwqwq 然後每次都跑一次矩陣樹定理qwqwq 但是這樣的時間複雜度是 o n 32 所以說。跑的。2s。很勉強qwqwq 如下 i...

SHOI2016 黑暗前的幻想鄉

如果沒有建築公司的限制,那麼就是個 mathrm 板子 其實有了也一樣 發現 n leq 17 考慮容斥 每次欽定一些建築公司,計算它們包含的邊的生成樹的方案數 複雜度 mathrm 2 nn 3 include include include include define rg register ...

SHOI2016 黑暗前的幻想鄉

嘟嘟嘟 這題昨天看覺得沒有思路,今天看了一眼覺得就是個水題。首先如果不考慮每乙個人只能選一條路的話,那就是求一張無向圖 有重邊,有自環 的生成樹個數。這個直接用矩陣樹定理 高斯消元求解行列式即可解決。現在有了限制,怎麼辦?容斥!其實和 zjoi2016 小星星這道題有點像。想一下,如果乙個公司修了兩...