P3343-[ZJOI2015]地震后的幻想乡【dp,数学期望】
正題
題目鏈接:https://www.luogu.com.cn/problem/P3343
題目大意
給出nnn個點的一張無向圖,每條邊被修復的時間是[0,1][0,1][0,1]的一個隨機實數,求這張圖聯通期望時間。
1≤n≤10,m≤n(n?1)21\leq n\leq 10,m\leq \frac{n(n-1)}{2}1≤n≤10,m≤2n(n?1)?
解題思路
這個隨機實數好像是用來嚇人的(但是概率分布函數好像能搞)
假設修好了kkk條之后恰好聯通了,那么期望需要的時間就是km+1\frac{k}{m+1}m+1k?
好了現在要求恰好在kkk條邊修好之后聯通的方案,因為每條邊修好的先后順序是完全隨機的。
設fS,if_{S,i}fS,i?在生成子圖SSS中修好了iii條邊是沒有聯通的方案,gS,ig_{S,i}gS,i?則表示聯通了的方案,dSd_{S}dS?表示生成子圖SSS的邊數。
求fS,if_{S,i}fS,i?的話和之前的[集訓隊作業2013]城市規劃思路很向,考慮擴展出一個新的點kkk,那么我們枚舉一個包含kkk的聯通塊T(k∈T,T?S)T(k\in T,T\subseteq S)T(k∈T,T?S),然后合并這個聯通塊后其他的亂選,就有方程
fS,i=∑k∈T,T?S∑j=0min{dT,i}gT,j×(dS?Ti?j)f_{S,i}=\sum_{k\in T,T\subseteq S}\sum_{j=0}^{min\{d_{T},i\}}g_{T,j}\times \binom{d_{S-T}}{i-j}fS,i?=k∈T,T?S∑?j=0∑min{dT?,i}?gT,j?×(i?jdS?T??)
然后gS,ig_{S,i}gS,i?不需要專門的方程因為有fS,i+gS,i=(dSi)f_{S,i}+g_{S,i}=\binom{d_S}{i}fS,i?+gS,i?=(idS??)
然后答案就是
∑i=0mim+1(fG,i(dGi)?fS,i?1(dGi?1))=1m+1∑i=0mfG,i(dGi)\sum_{i=0}^{m}\frac{i}{m+1}(\frac{f_{G,i}}{\binom{d_G}{i}}-\frac{f_{S,i-1}}{\binom{d_G}{i-1}})=\frac{1}{m+1}\sum_{i=0}^m\frac{f_{G,i}}{\binom{d_G}{i}}i=0∑m?m+1i?((idG??)fG,i???(i?1dG??)fS,i?1??)=m+11?i=0∑m?(idG??)fG,i??
時間復雜度O(3nn2)O(3^nn^2)O(3nn2)
code
#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll N=10; ll n,m,e[1<<N],d[1<<N],g[1<<N][N*N/2],f[1<<N][N*N/2],C[51][51]; signed main() {scanf("%lld%lld",&n,&m);for(ll i=1;i<=m;i++){ll x,y;scanf("%lld%lld",&x,&y);x--;y--;e[(1<<x)|(1<<y)]++;}ll MS=(1<<n);for(ll s=0;s<MS;s++)for(ll t=s;t;t=(t-1)&s)d[s]+=e[t];C[0][0]=1;for(ll i=1;i<=50;i++)for(ll j=0;j<=50;j++)C[i][j]=(j?C[i-1][j-1]:0)+C[i-1][j];for(ll s=1;s<MS;s++){for(ll i=0;i<=d[s];i++){ll k=s&-s;for(ll t=(s-1)&s;t;t=(t-1)&s)if(t&k)for(ll j=0;j<=min(i,d[t]);j++)f[s][i]+=g[t][j]*C[d[s-t]][i-j];g[s][i]=C[d[s]][i]-f[s][i];}}double ans=0;for(ll k=0;k<=m;k++)ans+=(double)f[MS-1][k]/C[m][k];printf("%.6lf\n",ans/(double)(m+1));return 0; }總結
以上是生活随笔為你收集整理的P3343-[ZJOI2015]地震后的幻想乡【dp,数学期望】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高配置电脑组装大概要多少钱(高配置电脑组
- 下一篇: 4000的电脑配置清单怎么看(4000的