bzoj3456城市規劃 多項式取模

2022-02-27 12:11:05 字數 1747 閱讀 4005

求出有n個點的有標號簡單連通無向圖的數目。

什麼破玩意,直接輸出\(2^\)走人

我們發現這張圖要求連通,而上式肯定不能保證連通。

其實上式表示的是不保證連通的有標號簡單無向圖。

就差在乙個連通上啊。

所以我們設\(f(x)\)表示有x個點的有標號簡單連通無向圖的數目。

然後設\(g(x)\)為上式,即不保證連通時的方案數

於是我們列舉節點1所在的連通塊的大小,有

\[g(n) = \sum_^nc_^f(i)g(n-1)\]即

\[\frac = \frac^nc_^f(i)g(n-1)}

\]\[\frac} = \sum_\frac\frac^2}}

\]那麼我們分別設它們的生成函式為

\[a(x) = \sum_^\fracx^n

\]\[b(x) = \sum_^\frac}x^n

\]\[c(x) = \sum_^\frac}x^n

\]所以我們有

\[c(x) = a(x)b(x)

\]那麼有

\[a(x) \equiv b^(x)c(x) (mod\textx^)

\]所以利用fft算逆元,處理乘法即可.

//這裡用的fnt,即快速數論變換.

#include #include #include using namespace std;

typedef long long ll;

inline void read(int &x)

const int maxn = 1 << 18;

const int mod = 1004535809;

const int pri_rt = 3;

inline int qpow(int x,int p)

int len;

int e[maxn],ie[maxn];

inline int check(int &x)

inline void init()

for(int m=2;m<=n;m<<=1)

node a,b,c;

int inv[maxn],inv_fac[maxn],c[maxn];

int main()

c[0] = c[1] = 1;

for(int i=2;i<=n;++i) c[i] = qpow(2,(ll)i*(i-1)/2 % (mod - 1));

a.n = b.n = n+1;

for(int i=0;i<=n;++i) a.x[i] = (ll)c[i]*inv_fac[i] % mod;

for(int i=1;i<=n;++i) b.x[i] = (ll)c[i]*inv_fac[i-1]%mod;

get_inv(n+1,a,c);

fill(c.x + c.n,c.x + p,0);

fnt(p,c.x,e);fnt(p,b.x,e);

for(int i=0;i<=p;++i) c.x[i] = (ll)c.x[i]*b.x[i] % mod;

fnt(p,c.x,ie);

int ans = (ll)c.x[n]*qpow(inv_fac[n-1],mod - 2) % mod;

if(ans < 0) ans += mod;

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

getchar();getchar();

return 0;

}

bzoj3456 城市規劃 多項式,分治

description 剛剛解決完電力網路的問題,阿狸又被領導的任務給難住了.剛才說過,阿狸的國家有n個城市,現在國家需要在某些城市對之間建立一些 路線,使得整個國家的任意兩個城市都直接或間接的連通.為了省錢,每兩個城市之間最多只能有一條直接的 路徑.對於兩個建立路線的方案,如果存在乙個城市對,在兩...

bzoj3456 城市規劃 多項式求In

n 個點的無向聯通圖的個數 打著好累啊 一定要封裝乙個板子 記 c x 為無向圖個數的指數型生成函式,c 0 1 記 g x 為無向聯通圖個數的指數型生成函式,g 0 0 那麼 g x e 從而,c x in g x 複雜度 o n log n include include include inc...

多項式求逆 BZOJ3456 城市規劃

剛剛解決完電力網路的問題,阿狸又被領導的任務給難住了.剛才說過,阿狸的國家有n個城市,現在國家需要在某些城市對之間建立一些 路線,使得整個國家的任意兩個城市都直接或間接的連通.為了省錢,每兩個城市之間最多只能有一條直接的 路徑.對於兩個建立路線的方案,如果存在乙個城市對,在兩個方案中是否建立路線不一...