BZOJ4011 落憶楓音

2021-08-25 14:41:49 字數 2133 閱讀 2425

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...