YbtOJ 毒瘤染色 LCT

2022-09-20 11:00:11 字數 1365 閱讀 3923

開始時有一張\(n\)個點沒有邊的圖,\(q\)次操作加入一條邊,如果加入後圖是乙個沙漠(只有邊仙人掌的圖)時才能夠加入。

每次加入後詢問:開始所有點都是白色,\(k\)次隨機挑乙個點染黑,求最後白色點的連通塊數和黑色點的連通塊數的和。

\(1\leq n\leq 10^5,1\leq q\leq 3\times 10^5,1\leq k\leq 10^9\)

然後考慮怎麼求答案。

仙人掌的連通塊數=點數-邊數+環數。

至於本題我們可以考慮這些東西存在的期望數量。

設\(w_i\)表示指定\(i\)個點是白點的概率,那麼顯然就是\((\frac)^k\)。

然後設\(b_i\)表示指定\(i\)個點是黑點的概率,我們考慮容斥指定一些點是白點就是

\[b_i=\sum_^i\binom(-1)^j\left(\frac\right)^k

\]這樣是\(o(i)\)的,但是其實我們只有求環的出現概率時這個值會很大,但是環的大小和不超過\(n\),所以可以在需要的時候暴力求。

時間複雜度:\(o(q\log n)\)

#include#include#include#include#define ll long long

using namespace std;

const ll n=2e5+10,p=998244353;

struct lct

bool direct(ll x)

void pushup(ll x)

void rev(ll x)

void rvy(ll x)

void pushdown(ll x)

pushup(x);return;

} void rotate(ll x)

void splay(ll x)

return;

} void access(ll x)

void makeroot(ll x)

void link(ll x,ll y)

void split(ll x,ll y)

}t;ll n,q,k,op,ans,fa[n],inv[n],fac[n],fnv[n];

ll find(ll x)

ll power(ll x,ll b)

return ans;

}ll c(ll n,ll m)

ll w(ll x)

ll b(ll x)

return (ans+p)%p;

}signed main()

else if(x!=y)

} ans=(ans+p)%p;

printf("%lld\n",las=ans);

} return 0;

}

Foreign 染色 LCT 線段樹

詢問x到根路徑上不同顏色的個數,支援將x到根的路徑上的點全部設為新的顏色。我們將邊兩端的點顏色相同的邊設為實邊,不同的設為虛邊。那麼一次新增顏色的操作顯然就是lct的access操作!access的時候恰是虛邊和實邊的轉換。那麼我們只要用線段樹維護每個點到根的貢獻,結合dfs序來實現子樹加,每次在l...

YbtOJ 732 斐波那契 特徵方程,LCT

給出 n 個點的一棵樹,以 1 為根,每個點有點權 a i 要求支援 m 次操作 修改乙個修改乙個節點的父節點 修改一條路徑的權值為 w 給出 u 詢問 fbi a u 給出 u,v 將路徑 u v 的點權排列好後設為 b 求 sum k sum kfbi sum jb z 其中 fbi i 表示第...

3 28 省選模擬賽 染色 LCT 線段樹

發現和sdoi2017樹點塗色差不多 但是當時這道題模擬賽的時候不會寫 賽後也沒及時訂正 所以這場模擬賽的這道題雖然秒想到了lct和線段樹但是最終還是只是打了暴力。痛定思痛 還是要把這道題給補了。但是對於這道題來說 暴力還是有價值的。考慮20分 每次暴力dfs.考慮對於樹是隨機生成的 那麼期望高度為...