日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JZOJ 5987. 【WC2019模拟2019.1.4】仙人掌毒题

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JZOJ 5987. 【WC2019模拟2019.1.4】仙人掌毒题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description


Input

輸入文件cactus .in
第一行4個空格隔開的整數n,m,t,w
接下來m行,每行兩個空格隔開的整數u,v,表示m次加邊操作.

Output

輸出文件為cactus.out
輸出m行,每行一個整數,表示期望模998244353的結果.

Sample Input

輸入1:

5 5 1 1
1 2
1 3
2 3
3 4
1 5

輸入2:

5 5 0 1
1 2
1 3
2 3
3 4
1 5

輸入3:

5 5 3 1
1 2
1 3
2 3
3 4
1 5

Sample Output

輸出1:

199648875
399297745
798595486
3
199648873

輸出2:

4
3
3
2
1

輸出3:

934356719
870469080
902412899
838525260
774637621

Data Constraint

Hint

更正:題目有重邊有自環也算環(無視掉題目中第一行的定義,即只要求每條邊在至多一個簡單環中)

Solution

  • 設編號是 000 的點為白點、編號是 111 的點為黑點。

  • 首先要看透這道題的本質:答案等于 點數-邊數+環數 (黑白點分開計算)!!

  • 具體怎么算一會再說,現在先解決問題的第一步,如何判斷讀入的邊是否能夠加入。

  • 用 LCT 就很好判斷了(也能用樹鏈剖分),若沒連通直接加(把邊化成點加入);

  • 若已連通且路徑上的邊有的已經被標記過了,就不能加了;

  • 否則可以加,并將路徑上的邊都標記一遍(這個暴力標記,每條邊最多被標記一次)。

  • 這樣的話環的大小我們都能直接算出來。

  • 接著我們就能算答案了。

  • 先算點數貢獻: 一個點是白點的概率其實就是 (n?1n)t(\frac{n-1}{n})^t(nn?1?)t(很關鍵),所有白點貢獻即為 n?(n?1n)tn*(\frac{n-1}{n})^tn?(nn?1?)t

  • 黑點呢就是 1?1-1?白點概率,所有黑點:n?(1?(n?1n)t)n*(1-(\frac{n-1}{n})^t)n?(1?(nn?1?)t) ,同理。

  • 再算邊數貢獻: 一條邊是白邊的概率其實就是 (n?2n)t(\frac{n-2}{n})^t(nn?2?)t ,而一條黑邊的概率的計算可以“正難則反”,相當于是 (1?x(1-x(1?x是白點)?(1?y)*(1-y)?(1?y是白點))) ,即為:1?2?(n?1n)t+(n?2n)t1-2*(\frac{n-1}{n})^t+(\frac{n-2}{n})^t1?2?(nn?1?)t+(nn?2?)t

  • 最后算環數貢獻: 一個大小為 mmm 白環的概率比較好算,就是 (n?mn)t(\frac{n-m}{n})^t(nn?m?)t ,本質跟前面白點、白邊是一樣的。

  • 但是一個大小為 mmm 的黑環的概率就不太好算了。下面給出兩種方法:

  • 方法①:分治NTT。 這樣會碼量大而且跑得慢,不過簡單直接,本質是DP計算。

  • f[i]f[i]f[i] 表示大小為 iii 的環在 ttt 次操作后全黑的概率,再設一個輔助數組 g[i]g[i]g[i] 表示包含 iii 個點的集合在 ttt 次操作后全白的概率。根據前面的討論即有:g[i]=(n?in)tg[i]=(\frac{n-i}{n})^tg[i]=(nn?i?)t

  • O(n)O(n)O(n) 預處理出 g[i]g[i]g[i] ,再用補集轉化的思想可以求出 f[i]f[i]f[i]

  • 1 減去所有不是全黑的情況的概率就是全黑的概率 ,即:f[i]=1?∑j=0i?1(f[j]?g[i?j]?Cij)f[i]=1-\sum_{j=0}^{i-1}(f[j]*g[i-j]*C_i^j)f[i]=1?j=0i?1?(f[j]?g[i?j]?Cij?)

  • 這里的 jjj 枚舉的是環中全黑的點的個數。因為我們需要在這 iii 個點中選出 jjj 個使其全黑,所以方案數要乘一個組合數 CijC_i^jCij?

  • 這個用分治NTT就可以 O(nlog2n)O(n\ log^2n)O(n?log2n) 求出 f[i]f[i]f[i] 了(分治時先做完左邊,再算值加到右邊)。

  • 方法②:容斥。 這樣計算很快、碼量小,但沒那么好想。下面的代碼我打的是容斥做法。

  • 我們發現不需要將 111nnn 每個 f[i]f[i]f[i] 都算出來,只用對特定的環計算即可。

  • 于是可得容斥:f[m]=∑i=0m(?1)i?Cmi?(n?in)tf[m]=\sum_{i=0}^{m}(-1)^i*C_m^i*(\frac{n-i}{n})^tf[m]=i=0m?(?1)i?Cmi??(nn?i?)t

  • 上式中 iii 枚舉的是 該環中至少有 iii 個白點 ,正確性顯然。

  • 于是我們預處理階乘、逆元,每個環就可以 O(mlogt)O(m\ log\ t)O(m?log?t) 計算其全黑概率了。

  • 由于每個環只用算一次,所以這部分復雜度就是 ∑mlogt=nlogt\sum m\ log\ t=n\ log\ tm?log?t=n?log?t

  • 總復雜度即為 O(nlogt+mlogn)O(n\ log\ t+m\ log\ n)O(n?log?t+m?log?n) ,其中 mlognm\ log\ nm?log?n 是用 LCT 判加邊的復雜度。

Code

#include<cstdio> #include<algorithm> #include<cctype> using namespace std; typedef long long LL; const int N=1e5+5,M=N*3,mo=998244353; int tot,top,ans; int fa[M],s[M][2],sum[M],key[M],st[M]; bool rev[M],vis[M],bz[M]; int f[N],g[N],inv[N],fs[N]; inline int read() {int X=0,w=0; char ch=0;while(!isdigit(ch)) w|=ch=='-',ch=getchar();while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X; } void write(int x) {if(x>9) write(x/10);putchar(x%10+'0'); } inline bool pd(int x) {return s[fa[x]][1]==x; } inline bool isroot(int x) {return s[fa[x]][0]^x && s[fa[x]][1]^x; } inline void reverse(int x) {if(x) swap(s[x][0],s[x][1]),rev[x]^=1; } inline void update(int x) {sum[x]=sum[s[x][0]]+sum[s[x][1]]+key[x];vis[x]=vis[s[x][0]]|vis[s[x][1]]|bz[x]; } inline void down(int x) {if(rev[x]){reverse(s[x][0]),reverse(s[x][1]);rev[x]=false;} } inline void rotate(int x) {int y=fa[x],w=pd(x);if((fa[x]=fa[y]) && !isroot(y)) s[fa[y]][pd(y)]=x;if(s[y][w]=s[x][w^1]) fa[s[y][w]]=y;s[fa[y]=x][w^1]=y;update(y); } inline void splay(int x) {for(int y=st[top=1]=x;!isroot(y);y=fa[y]) st[++top]=fa[y];while(top) down(st[top--]);for(int y;!isroot(x);rotate(x))if(!isroot(y=fa[x])) rotate(pd(x)==pd(y)?y:x);update(x); } inline void access(int x) {for(int y=0;x;x=fa[y=x]){splay(x);s[x][1]=y;update(x);} } inline void mkroot(int x) {access(x),splay(x),reverse(x); } inline void link(int x,int y) {mkroot(x),fa[x]=y; } void dfs(int x) {if(s[x][0]) dfs(s[x][0]);if(s[x][1]) dfs(s[x][1]);if(x>tot) bz[x]=true;update(x); } inline int ksm(int x,int y) {int s=1;while(y){if(y&1) s=(LL)s*x%mo;x=(LL)x*x%mo;y>>=1;}return s; } inline int C(int x,int y) {return (LL)f[x]*g[y]%mo*g[x-y]%mo; } int get(int x) {return fs[x]==x?x:fs[x]=get(fs[x]); } int main() {freopen("cactus.in","r",stdin);freopen("cactus.out","w",stdout);int n=read(),m=read(),t=read(),w=read();tot=n;f[0]=g[0]=1;for(int i=1;i<=n;i++) f[i]=(LL)f[i-1]*i%mo;g[n]=ksm(f[n],mo-2);for(int i=n-1;i;i--) g[i]=(LL)g[i+1]*(i+1)%mo;inv[0]=inv[1]=1;for(int i=2;i<=n;i++) inv[i]=(LL)(mo-mo/i)*inv[mo%i]%mo;for(int i=1;i<=n;i++) fs[i]=i;int wnode=ksm((LL)(n-1)*inv[n]%mo,t);int wedge=ksm((LL)(n-2)*inv[n]%mo,t);int bedge=(1-(LL)2*wnode%mo+mo+wedge)%mo;ans=(LL)wnode*n%mo;if(w) ans=(ans+(LL)(1-wnode+mo)*n)%mo;while(m--){int x=read(),y=read();if(get(x)^get(y)){fs[get(x)]=get(y);key[++n]=1;link(x,n);link(n,y);ans=(ans+mo-wedge)%mo;if(w) ans=(ans+mo-bedge)%mo;write(ans),putchar('\n');continue;}mkroot(x),access(y),splay(y);if(vis[y]){write(ans),putchar('\n');continue;}ans=(ans-wedge+mo)%mo;if(w) ans=(ans-bedge+mo)%mo;dfs(y);int ring=sum[y]+1;ans=(ans+ksm((LL)(tot-ring)*inv[tot]%mo,t))%mo;if(w)for(int i=0;i<=ring;i++){int ss=(LL)C(ring,i)*ksm((LL)(tot-i)*inv[tot]%mo,t)%mo;if(i&1) ss=mo-ss;ans=(ans+ss)%mo;}write(ans),putchar('\n');}return 0; }

總結

以上是生活随笔為你收集整理的JZOJ 5987. 【WC2019模拟2019.1.4】仙人掌毒题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 杨幂一区二区国产精品 | 污污的视频在线观看 | 亚洲丁香 | 亚欧视频在线观看 | 日本三区视频 | 高清一区二区视频 | 天天操天天射天天 | 日韩精品在线观看中文字幕 | 亚洲另类自拍 | 国产激情一区二区三区在线观看 | 中国美女毛片 | 毛片动漫 | 亚洲美女性生活 | 亚洲性天堂| 无码专区久久综合久中文字幕 | 丰满少妇被猛烈进入一区二区 | 免费视频日韩 | 播色网| 天天摸天天操 | 精品国产一区二区三区无码 | 日本一区二区三区久久 | 日本一区二区三区精品视频 | 日韩大胆视频 | 超碰伊人| 中文字幕在线日韩 | 日韩成人av网址 | 极品探花在线观看 | 欧美另类xxxx野战 | 精品国产成人av | 免费操| 黄色片视频免费看 | 五月婷婷影院 | 99热播精品 | 一区二区三区在线免费视频 | 国产尻逼 | 久久久久亚洲AV成人网人人小说 | 欧美日韩大片 | 国产www精品 | 五月综合色| 色综合久久中文字幕无码 | 亚洲天堂视频网站 | 伊人影院在线观看 | 色狠狠操 | 国产视频大全 | 中文字幕有码在线播放 | 黄色片a| 久久金品 | 啪啪一区二区 | 欧美福利视频在线观看 | 激情av在线| 亚洲欧洲综合 | 国产剧情一区二区三区 | 我要看免费毛片 | 亚洲福利影院 | av av在线| 亚洲激情在线播放 | 99久在线精品99re8热 | 人妻无码一区二区三区四区 | 欧美精品首页 | 精品国产91乱码一区二区三区 | 亚洲一区二区三区影院 | 麻豆国产一区 | www.久久精品视频 | 久久婷婷综合色丁香五月 | 中文字幕一区av | 色狠狠综合网 | 99精品国自产在线 | 亚洲国产成人精品一区二区三区 | 日韩黄色av | 97人人澡| 欧美精品乱码久久久久久按摩 | 亚洲码在线观看 | 亚洲理论片 | 视频在线观看电影完整版高清免费 | 欧美精品18 | 国产成人免费观看视频 | 九九九热视频 | 免费成年人视频 | 婷婷国产一区 | 国产主播一区二区三区 | 中文字幕亚洲无线码在线一区 | 丁香伊人| 亚洲精品免费观看 | 91av视频| 高清一级片 | 香蕉在线观看视频 | 国产视频一区二区三区四区 | 97免费在线 | 成人黄色小说视频 | 亚洲久久天堂 | av中文天堂在线 | 深喉口爆一区二区三区 | 国产老女人乱淫免费可以 | 日韩精品无码一区二区三区 | 亚洲AV无码一区二区三区性 | 操碰av | 国产学生美女无遮拦高潮视频 | 性做久久| 亚洲人色|