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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

UOJ351 新年的叶子

發布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UOJ351 新年的叶子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • UOJ351 新年的葉子
  • 題意
  • 題解
  • Code:

UOJ351 新年的葉子

題目傳送門

題意

躲過了\(AlphaGo\)之后,你躲在\(SingleDog\)的長毛里,和它們一起來到了\(AlphaGo\)的家。此時你們才突然發現,\(AlphaGo\)的家居然是一個隱藏在地下的計算中心!難道\(AlphaGo\)如此人贏的秘密是...它其實是一個\(AI\)
根據情報,這個地下的計算中心的結構構成了一棵無根樹,整個計算中心名為被\(AT-field\)的力場保護起來,保護力場的直徑恰好等于樹的直徑(樹的直徑定義為樹上距離最遠的兩個結點之間的距離,結點 \(u\),\(v\) 的距離定義為從 \(u\)\(v\) 最少需要經過的邊數)。
由于保護力場的存在,\(SingleDog\)們每次只能進入整棵樹的一個葉子(度為1的結點),由于狗的大腦很小,他們每次只會隨機進攻一個原樹的葉子,并且破壞里面的設備,更加狼狽的是他們甚至會重復進入一個已經被破壞過的葉子。
他們想知道,期望多少次之后,可以使得保護力場的直徑縮小?
即,對于一棵樹,每次隨機染黑一個葉子(可能會重復染黑),期望多少次后直徑變小?

輸入格式
從標準輸入讀入數據。
第一行一個正整數\(n\),表示樹的點數。
接下來\(n?1\)行,每行兩個正整數\(x\),\(y\),表示樹上的一條邊。
輸出格式
輸出到標準輸出。
輸出一行一個整數表示答案在模 \(998244353\) 意義下的取值。
即設答案化為最簡分式后的形式為 \(\frac{a}\) ,其中 \(a\)\(b\) 互質。輸出整數 \(x\) 使得 \(x \equiv a \pmod{998244353}\)\(0 \leq x < 998244353\)??梢宰C明這樣的整數 \(x\) 是唯一的。

題解

首先一點可以發現的是,我們所需要的點只是所有直徑的兩個端點,而其余的都是沒有用的點,因為改變了其余的點,是不能夠達成第一次改變樹的直徑的條件的。然后我們分直徑的奇偶進行討論:

  • 如果直徑為奇數,那么我們一定可以找到中間的那條邊,滿足所有的直徑都經過那一條邊。那么我們會發現,所有的有用點會被分為兩個點集,分別是在中間那條邊的左邊與右邊。直徑會發生改變當且僅當只剩下了某一個點集。
  • 如果直徑為偶數,那么我會可以找到中間的一個點,滿足所有的直徑都經過這個點。那么我們以這個點為根,構建一棵有根樹,所有的有用點會根據其所處于根節點的哪棵子樹里被劃分成若干個點集。所以所有的直徑都是從某一個點集中的一個點出發,到達另一個點集中,直徑會發生改變當且僅當我們刪除到只剩下一個點集。

現在我們已經將所有有用的葉子節點分成了若干個集合,所以我們開始計算每一個集合的貢獻(即最后只剩下這個集合)。這里,我們設這個集合的點數為\(d\),所有集合總點數為\(d0\),葉子節點的總點數為\(m\)
首先我們枚舉我們所選的集合最后會剩下多少個點\(i (1 \leq i \leq d0-1)\),那么這\(i\)個點的總選擇方案為\(\tbinom{d0}{i}\)。由于我們要求刪掉所有集合只剩下所選的集合,并且為了滿足是在刪掉最后一個點之后才是第一次改變直徑,我們最后一個刪掉的點一定不能是所選集合中的點。然后我們考慮前面刪點的方案,這個隨機刪點的方法似乎比較的不靠譜,于是我們考慮轉化一下問題。我們假設當前還有\(x\)個葉子節點沒有刪,那么刪掉一個葉子節點的代價是\(\frac{m}{x}\),那么問題就轉化成了刪掉每一個點有一個代價,要求給定一個刪除的方案,求總代價。然后這個方案數實際上就是待刪除節點的階乘。所以我們現在總共要刪掉的節點數是\(d0-d+i-1\)(減一是因為有一個非所選集合的點一定要最后刪,這個點的位置已經定下來了),總共的方案數為\((d0-d+i-1)!\),然后最后刪除的點的選擇方案有\((d0-d)\)中,所以實際的方案數是\((d0-d+i-1)!*(d0-d)\),刪除這些節點的總共代價是\(\sum_{j=d-i+1}^{d0}\frac{m}{j}\)。刪除這些節點之后,由于我們的操作次數是無限次,所以所有的葉子節點最后都一定會被刪除掉,那么剩余的那些沒有用的葉子節點總共的刪除方案個數為\((d-i)!\)種。最后要求的是期望,所以還要除以一個總共的方案數\(d0!\)。
所以最后對于某一個集合的答案計算的公式如下:
\(\sum_{i=1}^ozvdkddzhkzd\tbinom{d0}{i}*(d0-d+i-1)!*(d0-d)*(\sum_{j=d-i+1}^{d0}\frac{m}{j})*(d-i)!*\frac{1}{d0!}\)
里面的階乘,階乘逆元,\(\sum_j \frac{m}{j}\)可以預處理,組合數可以直接算,總共的復雜度為\(O(n)\)

Code:

#pragma GCC optimize (2,"inline","Ofast") #include<bits/stdc++.h> using namespace std; const int N=5e5+500; const int Md=998244353; typedef long long ll; int n; int fac[N],Inv[N]; inline int Add(const int &x,const int &y) {return x+y>=Md?(x+y-Md):(x+y);} inline int Sub(const int &x,const int &y) {return x-y<0?(x-y+Md):(x-y);} inline int Mul(const int &x,const int &y) {return (ll)x*y%Md;} int Powe(int x,int y) {int res=1;while(y) {if(y&1) res=Mul(res,x);x=Mul(x,x);y>>=1;}return res; }struct edge {int to,nxt; }E[N<<2]; int tot,setc,Hd,totc,totlf; int head[N],dis[N],fa[N],cnt[N],vis[N],isf[N],in[N],sum[N],inv[N]; void Addedge(int u,int v) {E[++tot].to=v;E[tot].nxt=head[u];head[u]=tot;E[++tot].to=u;E[tot].nxt=head[v];head[v]=tot; }void Dfs(int o,int ff,int d) {dis[o]=d;fa[o]=ff;for(int i=head[o];~i;i=E[i].nxt) {int to=E[i].to;if(to==ff) continue;Dfs(to,o,d+1);} }void Get(int o,int ff,int ds,int st) {if(isf[o]&&ds==Hd) cnt[st]++,totc++;vis[o]=1;for(int i=head[o];~i;i=E[i].nxt) {int to=E[i].to;if(to==ff||vis[to]) continue;Get(to,o,ds+1,st);} }void Init() {fac[0]=1;for(int i=1;i<=500000;i++) {fac[i]=(ll)fac[i-1]*i%Md;}Inv[500000]=Powe(fac[500000],Md-2);for(int i=500000-1;i;i--) {Inv[i]=(ll)Inv[i+1]*(i+1)%Md;}Inv[0]=1;sum[1]=1;inv[0]=inv[1]=1;for(int i=2;i<=n;++i) {inv[i]=Mul(inv[Md%i],(Md-Md/i));sum[i]=Add(sum[i-1],inv[i]);} }int C(int n,int m) {assert(n>=m);return (ll)fac[n]*Inv[m]%Md*Inv[n-m]%Md; }int main() {memset(head,-1,sizeof head);scanf("%d",&n);Init();for(int i=1,u,v;i<n;i++) {scanf("%d%d",&u,&v);Addedge(u,v);in[u]++;in[v]++;}for(int i=1;i<=n;i++) {if(in[i]==1) {isf[i]=1;totlf++;}}Dfs(1,1,0);int Mx=1;for(int i=1;i<=n;i++) {if(dis[i]>dis[Mx]) Mx=i;}Dfs(Mx,Mx,0);Mx=1;for(int i=1;i<=n;i++) {if(dis[i]>dis[Mx]) Mx=i;}int D=dis[Mx];Hd=dis[Mx]>>1;for(int i=1;i<=Hd;i++) Mx=fa[Mx];if(!(D&1)) {for(int i=head[Mx];~i;i=E[i].nxt) {int to=E[i].to;vis[to]=1;Get(to,Mx,1,++setc);if(!cnt[setc]) --setc;}}else {vis[Mx]=vis[fa[Mx]]=1;Get(Mx,fa[Mx],0,++setc);if(!cnt[setc]) --setc;Get(fa[Mx],Mx,0,++setc);if(!cnt[setc]) --setc;}int res=0;int d0=totc,m=totlf;for(int i=1;i<=setc;i++) {int d=cnt[i];for(int j=0;j<cnt[i];j++) {int ans=Mul(C(d,j),fac[d0-d+j-1]);ans=Mul(ans,d0-d);int S=Mul(Sub(sum[d0],sum[d-j]),m);ans=Mul(ans,S);ans=Mul(ans,fac[d-j]);ans=Mul(ans,Inv[d0]);res=Add(res,ans);}}printf("%d\n",res);return 0; }

轉載于:https://www.cnblogs.com/Apocrypha/p/9913045.html

總結

以上是生活随笔為你收集整理的UOJ351 新年的叶子的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 正在播放一区 | av图片在线 | 337p亚洲精品色噜噜噜 | 美女xx00 | 美国av大片| 香蕉视频日本 | 亚州中文| 91欧美激情一区二区三区 | 女同性做爰三级 | 国产高清一区二区三区 | 久久精品人人做人人爽 | 男人猛进女人爽的大叫 | 久久精品国产亚洲av高清色欲 | 欧美成人aaaaa | 色欲av无码精品一区 | 黄色av网站免费在线观看 | 深夜福利久久 | 美女脱衣服一干二净 | 性欧美在线视频观看 | 国产91av视频 | 男人天堂综合网 | 老司机午夜免费福利 | 国产大片一区二区 | 亚洲91色 | 99国产精品国产免费观看 | 丁香六月啪啪 | 久草福利在线观看 | 嫩草私人影院 | 蜜桃视频网站 | 五月婷综合网 | 色网站在线播放 | 欧美aaaaaa | 99久久精品国产亚洲 | 影音先锋在线视频观看 | 99久99| 亚洲福利久久 | 黄色免费网站在线观看 | wwwwyoujizzcom| а中文在线天堂 | 中文字幕乱码无码人妻系列蜜桃 | 99er精品视频 | 久久久精品视频在线观看 | 亚洲影音先锋 | 日韩毛片高清在线播放 | 久久永久视频 | 免费成人结看片 | 精品一区二区三区视频日产 | 亚洲人成影视 | 一区二区三区在线播放 | 久久久久人妻一区 | 我爱avav色aⅴ爱avav | 在线免费黄色网 | 另类激情亚洲 | 香蕉视频2020 | 日本欧美国产一区二区三区 | 三区在线观看 | 男女av网站 | 国产一级黄色大片 | 15—16女人毛片 | 亚洲专区免费 | 日本在线国产 | 网站免费黄色 | 星空大象mv高清在线观看免费 | 中文字幕在线播放日韩 | 亚洲青青草原 | 国产啊v在线 | 国产精品亚洲AV色欲三区不卡 | 亚洲视频一二区 | 日韩av在线免费播放 | 成年人91视频 | 电影《走路上学》免费 | youjizz亚洲女人| 伊人网综合| 天天色天天操天天射 | 可以在线看黄的网站 | 在线观看a视频 | 亚洲一区二区国产 | 又大又硬又爽免费视频 | 女儿的朋友5中汉字晋通话 欧美成人免费高清视频 | 久久国产色| 久久亚洲aⅴ无码精品 | 欧美人与禽zozzo性之恋的特点 | 日本特级黄色大片 | 综合久久国产 | jul023被夫上司连续侵犯 | 99re6在线精品视频免费播放 | 色葡萄影院 | 黄色小视频免费 | 一区二区三区伦理片 | 97免费在线观看视频 | 黄色aa大片 | 欧美日韩毛片 | 综合精品久久 | 国精品一区二区三区 | 深夜福利国产精品 | 色欧美视频 | 国产精品免费av一区二区 | 黄色一级生活片 | 快播在线视频 |