bzoj3925
Posted moxingtianxia
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj3925相关的知识,希望对你有一定的参考价值。
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<string> 5 #include<cstring> 6 #include<algorithm> 7 #include<iomanip> 8 using namespace std; 9 namespace Moxing 10 const int N=12,M=46; 11 int edge[N+5],cnt[1<<N+5],sz[1<<N+5],n,m; 12 long long f[1<<N+5][M+5],g[1<<N+5][M+5],c[M+5][M+5]; 13 struct main 14 main() 15 scanf("%d%d",&n,&m); 16 for(int i=1; i<=m; i++) 17 int x,y; 18 scanf("%d%d",&x,&y); 19 x--,y--; 20 edge[x]|=1<<y; 21 edge[y]|=1<<x; 22 23 c[0][0]=1; 24 for(int i=1; i<=M ; i++) 25 c[i][0]=c[i][i]=1; 26 for(int j=1; j<i; j++) 27 c[i][j]=c[i-1][j]+c[i-1][j-1]; 28 29 30 int all=(1<<n)-1; 31 for(int s=1; s<=all; s++) 32 sz[s]=sz[s>>1]+(s&1); 33 if(sz[s]==1) 34 g[s][0]=1; 35 continue ; 36 37 for(int i=0; i<n; i++) 38 if(s&(1<<i)) cnt[s]+=sz[edge[i]&s]; 39 40 cnt[s]>>=1; 41 for(int t=s; t; t=(t-1)&s) 42 if(t&(s&-s)) 43 for(int i=0; i<=cnt[t]; i++) 44 for(int j=0; j<=cnt[s^t]; j++) 45 f[s][i+j]+=g[t][i]*c[cnt[s^t]][j]; 46 47 48 49 50 51 for(int i=0; i<=cnt[s]; i++) 52 g[s][i]=c[cnt[s]][i]-f[s][i]; 53 54 55 double ans=0; 56 for(int i=0; i<=m; i++) 57 ans+=(double)f[all][i]/c[cnt[all]][i]; 58 //cout<<f[all][i]<<‘ ‘<<c[cnt[all]][i]<<endl; 59 //cout<<ans<<‘ ‘; 60 61 printf("%.6lf",ans/(m+1)); 62 exit(0); 63 64 UniversalLove; 65 66 int main() 67 Moxing::main(); 68
以上是关于bzoj3925的主要内容,如果未能解决你的问题,请参考以下文章