BZOJ4011 HNOI2015 落憶楓音

2022-04-28 22:21:24 字數 956 閱讀 3033

bzoj

luogu

首先考慮不加那條邊怎麼做吧。

只要給每個節點擊定乙個父親(1號點除外),那麼這棵樹就可以被唯一確定。

很顯然吧。

由於這是乙個\(dag\),所以你不管怎麼選父親節點,都不會出現環。

所以在\(dag\)上的答案就是\(\prod_^du_i\)。(你就當\(du_1=1\)好了)

現在考慮在\(dag\)上加了一條邊,那麼就可能產生若干個環(注意是若干個而不是乙個)。

這時候按照上述的隨便選定父親節點的問題在於,可能選出了乙個環。

那樣就要求這個環上的每一條邊都要被選。

然後不在這個環上的點的父親隨便怎麼選這種方案都是不合法的。

所以對於乙個環\(a_1,a_2...a_k\),需要減去的部分就應該是\(\frac^du_i}^du_}\)。

這個東西在\(dag\)上跑一遍\(dp\)就可以了。

時間複雜度\(o(n+m)\)

#include#include#includeusing namespace std;

int gi()

const int n = 2e5+5;

const int mod = 1e9+7;

int n,m,xx,yy,to[n],nxt[n],head[n],cnt,du[n],f[n],ans=1,sum=1;

void link(int u,int v)

int fastpow(int a,int b)

return res;

}int dfs(int u)

int main()

memset(f,-1,sizeof(f));

ans=(ans-dfs(yy)+mod)%mod;

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

}

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

BZOJ4011 HNOI2015 落憶楓音

不妨假設楓葉上有 n個穴位,穴位的編號為 1 n。有若干條有向的脈絡連線著這些穴位。穴位和脈絡組成乙個有向無環圖 稱之為脈絡圖 例如圖 1 穴位的編號使得穴位 1 沒有從其他穴位連向它的脈絡,即穴位 1 只有連出去的脈絡 由上面的故事可知,這個有向無環圖存在乙個樹形子圖,它是以穴位 1為根的包含全部...