bzoj4011
解法:動態規劃
對於不加邊時,原圖為dag,答案顯然是
2 2
~n' role="presentation" style="position: relative;">n
n點的入度相乘。
若所連的邊為自環或連向點
1 1
。這時對答案沒有影響。
剩下的情況,設所連的邊為 (x
,y)' role="presentation" style="position: relative;">(x,
y)(x
,y),考慮計算包含邊 (x
,y) (x,
y)
的生成樹方案數。
設
為從 1 1
到 x' role="presentation" style="position: relative;">x
x的一條單向路徑,該路徑不包含
y y
。那麼 an
s=∑i
=1m∏
j=2n
indj
indy
∏p∈r
iind
p=∏j
=2ni
ndji
ndy∑
i=1m
1∏p∈
riin
dp' role="presentation">ans
=∑i=
1m∏n
j=2i
ndji
ndy∏
p∈ri
indp
=∏nj
=2in
djin
dy∑i
=1m1
∏p∈r
iind
pans
=∑i=
1m∏j
=2ni
ndji
ndy∏
p∈ri
indp
=∏j=
2nin
djin
dy∑i
=1m1
∏p∈r
iind
p其中 ∏p
∈rii
ndp ∏p∈
riin
dp
可以dp求解。
時間複雜度 o(
n)o (n
)。
**
#include
#include
#include
using
namespace
std;
class fastfilereaderinline
bool validdigit(char c)public:inline
void init()inline
int nextint()while(validdigit(c));return i;}inline
int nextsigned()while(!validdigit(c));dowhile(validdigit(c));return i*f;}inline
long
long nextlonglong()while(validdigit(c));return i;}inline
long
long nextsignedlonglong()while(!validdigit(c));dowhile(validdigit(c));return i*f;}inline
char nextchar()};
fastfilereader fs;
const
long
long p=1000000007ll;
int n,m,s,t,x,y,ind[100001];
long
long f[100001],inv[100001],ans=1ll;
bool vis[100001];
vector
point[100001];
void dfs(int u)
for(int v:point[u])
}int main()
dfs(1);
printf("%lld",(ans+=ans*inv[ind[t]]%p*f[1]%p)%=p);
}
bzoj4011落憶楓音
time limit 10 sec memory limit 512 mb submit 1137 solved 610 submit status discuss 恆逸,你相信靈魂的存在嗎?郭恆逸和姚楓茜漫步在楓音鄉的街道上。望著漫天飛舞的紅楓,楓茜突然問出 這樣乙個問題。相信吧。不然我們是什麼,...
BZOJ 4011 HNOI2015 落憶楓音
題意 給乙個有向無環圖,然後叫一條邊,問以1為根的生成樹數量。題面好長啊,出題人真能編故事 先考慮不加那條邊,則麼ans d 2 d 3 d 4 d n d為入度 因為在乙個dag中,只要除根以外的點每個點選一條入邊,就能獲得一棵生成樹。現在考慮加了這條邊,如果再這麼算,就有可能出現環的情況,所以我...
BZOJ4011 HNOI2015 落憶楓音
用脈絡樹總數減去不合法的情況 即樹上有環的情況 拓撲序dp,注意特判連的邊指向1的情況 學到了新姿勢 線性求逆元 原理 假設現在要求a的逆元,x mod a,y mod a ax y 0 ax y a 1 x y 1 ax y 0 ax y a 1 x y 1 code include includ...