Pagini recente » Cod sursa (job #2178028) | Cod sursa (job #2363100) | Cod sursa (job #330212) | Cod sursa (job #399101) | Cod sursa (job #1678875)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#include <iomanip>
#include <algorithm>
#include <map>
#define hashn 137
#define mod 1000000007
#define ll long long
using namespace std;
ifstream f("avd.in");
ofstream g("avd.out");
vector <int> v[15],c[15];
map <int ,int> h;
int n,m,k,s[15],nrn,dp[15],use[15],ok[15],pw[15];
void DFS(int x)
{int i;
use[x]=1; nrn++;
for(i=0;i<v[x].size();i++)
if (!use[v[x][i]] && ok[c[x][i]]) DFS(v[x][i]);
}
int main()
{ int i,j,x,y,t,act,conf=0;
f>>t;
for(;t;t--)
{
f>>n; m=n-1;
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
{v[i].clear();
c[i].clear();
}
h.clear();
dp[0]=1; conf=0;
for(i=1;i<=n;i++)
for(j=0;j<=n-i;j++)
dp[i+j]+=dp[j];
for(i=1;i<n;i++)
{ f>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
c[x].push_back(i);
c[y].push_back(i);
}
pw[1]=hashn;
for(i=2;i<=15;i++)
pw[i]=1LL*pw[i-1]*hashn%mod;
for(i=0;i<(1<<m);i++)
{
for(j=1;j<=m;j++)
if (i&(1<<(j-1))) ok[j]=1; else ok[j]=0;
memset(use,0,sizeof(use));
k=0;
for(j=1;j<=n;j++)
if (!use[j]) {nrn=0; DFS(j); k++; s[k]=nrn;}
sort(s+1,s+k+1);
act=0;
for(j=1;j<=k;j++)
act=((ll)act+s[j]*pw[j])%mod;
if (!h[act]) {h[act]++; conf++;}
}
g<<fixed<<setprecision(5)<<(double)conf/dp[n]<<"\n";
}
return 0;
}