标签:mat close -- algo scan src for space display
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 }
标签:mat close -- algo scan src for space display
原文地址:https://www.cnblogs.com/Moxingtianxia/p/11373928.html