Lightning(生成樹計數)

2021-09-25 09:39:45 字數 1579 閱讀 4596

原題:

題意:

n個點,任意兩個點之間可以連邊當且僅當距離不大於r,並且中間沒有其他邊。求生成樹個數。

解析:

判斷中間有沒有點可以直接n3for,也可以n2log,列舉每個點為起點,其他的點與之形成的向量用map比較是否存在即可。

連完邊就用矩陣樹進行n3做就行了。

#include

using

namespace std;

#define rep(i,a,b) for(int i=a;i<=b;i++)

#define ll long long

const ll p =

10007

;const

int maxn=

309;

int x[maxn]

,y[maxn]

;bool f[maxn]

[maxn]

;ll c[maxn]

[maxn]

;ll det

(ll n)

if(c[i]

[i]==0)

return0;

ret=ret*c[i]

[i]%p;

}return

(ret+p)

%p;}

inline

void

link

(int a,

int b)

int fa[maxn]

;int

fin(

int i)

void

deal

(int n)

c[i-1]

[j-1]--

; c[i-1]

[i-1]++

; c[j-1]

[i-1]--

; c[j-1]

[j-1]++

;}}}

if(sum>1)

printf

("%lld\n"

,det

(n-1))

;}struct pair_hash

(p.first)

;auto h2 = std::hash

(p.second)

;return h1 ^ h2;}}

;int

main()

rep(i,

1,n))==

0)]=j;

}else];

double l0=

sqrt

(1.0

*(x[p0]

-x[i])*

(x[p0]

-x[i])+

1.0*

(y[p0]

-y[i])*

(y[p0]

-y[i]))

;if(l]=j;}}

}for

(auto p:m)

}deal

(n);

}}

生成樹計數

考慮簡單帶權無向圖的情況。約定這張圖為 g v,e n v m e e i u i,v i,w i 表示第 i 條邊,deg u 表示 u 所連邊的邊權和。mathbf a 滿足 mathbf a w i,j mathbf d 滿足 mathbf d i j deg i mathbf b 滿足 ma...

內向樹的生成樹計數

所謂內向樹,就是樹上的邊是由兒子指向父親 來看乙個題 元首把花園分為 nn n 行 mm m 列的網格。每個格仔中都可以放置乙個標識,指向上 下 左 右四個方向中的任意乙個。元首位於乙個格仔時,會按照其中標識所指的方向進入周圍的格仔,或者走出花園 即目的格仔不在網格之內 舉個例子 對於下面的放置方式...

無標號生成樹計數

做模擬賽的時候碰到了,感覺稍微有點意思,寫來自己看。無標號有根樹 設f n 表示樹的大小為 n 的方案數,其生成函式f z n 0f nzn。考慮生成函式的組合意義,fn 1可以由若干個無序的不同大小的 若干個無序的相同大小的本質不同的子樹 拼成,對於大小為 k 的樹,作為多棵子樹時他可以貢獻的不同...