將被敬仰的人向敬仰他的人連一條有向邊,那麼如果存在環顯然無解。
否則由於每個點入度最多為 \(1\),所以形成了一棵樹形結構。
設 \(f[x]\) 表示 \(x\) 子樹內排序的方案數。考慮加入一棵子樹時,\(x\) 依然排在最右,剩餘位置填給任意的人,方案數為
\[f'[x]=f[x]\times f[v]\times \binom
\]時間複雜度 \(o(n\log \operatorname)\)。
由於出題人很不良心地要求每次模數都不一樣,所以必須每次預處理階乘和逆元。
#include using namespace std;
typedef long long ll;
const ll n=500010;
ll q,n,m,mod,tot,head[n],deg[n],cnt[n],size[n],fac[n];
ll ans,f[n];
void prework()
struct edge
e[n];
void add(ll from,ll to)
bool topsort()
ll c(ll n,ll m)
void dfs(ll x)
size[x]++;
}int main()
if (!topsort())
ll s=0;
for (ll i=1;i<=n;i++)
if (!deg[i])
printf("%lld\n",ans);
} return 0;
}
雷達裝置 Ybtoj
有n nn個建築物,第i ii個建築物在笛卡爾座標系上的座標為 xi yi x i,y i xi y i 你需要在x xx軸上安裝一些雷達,每個雷達的偵察半徑均為d dd,要求每個建築物都至少被乙個雷達偵測到,求最少要安裝幾個雷達。第一行兩個正整數n,d n,dn,d。接下來n nn行,第i ii行...
YBTOJ 電路維修
思路 乍一看這題,沒有bfs的頭緒 但是,我們想到了spfa 我們可以把地圖中的每個點看成方格,這樣就有 n 1 m 1 個方格 如果兩點之間有線聯通,那它們之間的邊權就是0,否則就為1 然後spfa就可以了 include include include using namespace std i...
YBTOJ 守衛挑戰
有 n 項任務,有乙個數 k 每一項任務成功的概率是 p i 這裡與原題目不同,原題目是百分之 p i 這裡相當於 p i frac 成功後會使 k 加上 a i 問至少成功 l 次且最後 k leq0 的概率是多少。資料範圍 0 leq k leq2000,0 leq l leq n leq 20...