Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <list>
- #include <map>
- #include <set>
- #include <queue>
- #include <deque>
- #include <stack>
- #include <bitset>
- #include <algorithm>
- #include <functional>
- #include <numeric>
- #include <utility>
- #include <sstream>
- #include <iostream>
- #include <iomanip>
- #include <cstdio>
- #include <cmath>
- #include <cstdlib>
- #include <ctime>
- using namespace std;
- const int N = 60;
- int n;
- vector<int> g[N];
- double dp[N][2*N][2*N];
- int used[N];
- int sz[N];
- double ndp[2*N][2*N];
- void dfs(int v)
- {
- used[v]=1;
- vector<int> sons;
- sz[v]=1;
- for (int i=0;i<g[v].size();i++)
- {
- int to=g[v][i];
- if (used[to])
- continue;
- dfs(to);
- sons.push_back(to);
- }
- for (int i=0;i<=sz[v]*2;i++)
- for (int j=0;j<=sz[v]*2;j++)
- dp[v][i][j]=0;
- dp[v][0][0]=1;
- sz[v]=1;
- for (int ii=0;ii<sons.size();ii++)
- {
- int to=sons[ii];
- for (int i=0;i<=(sz[v]+sz[to])*2;i++)
- for (int j=0;j<=(sz[v]+sz[to])*2;j++)
- ndp[i][j]=0;
- for (int i=0;i<=sz[v]*2;i++)
- for (int j=0;j<=sz[v]*2;j++)
- if (dp[v][i][j]>1e-20)
- for (int q=0;q<=sz[to]*2;q++)
- for (int w=0;w<=sz[to]*2;w++)
- {
- ndp[max(i,q+1)][max(j,max(w,q+1+i))]+=dp[v][i][j]*dp[to][q][w]*.5;
- ndp[max(i,q+2)][max(j,max(w,q+2+i))]+=dp[v][i][j]*dp[to][q][w]*.5;
- }
- sz[v]+=sz[to];
- for (int i=0;i<=sz[v]*2;i++)
- for (int j=0;j<=sz[v]*2;j++)
- dp[v][i][j]=ndp[i][j];
- }
- }
- class DiameterOfRandomTree {
- public:
- double getExpectation(vector <int> a, vector <int> b) {
- int n=a.size()+1;
- for (int i=0;i<=n;i++)
- g[i].clear();
- for (int i=0;i<=n;i++)
- used[i]=0;
- for (int i=0;i<a.size();i++)
- {
- g[a[i]].push_back(b[i]);
- g[b[i]].push_back(a[i]);
- }
- dfs(0);
- double ans=0;
- //cout<<sz[0]<<endl;
- for (int i=0;i<=2*sz[0];i++)
- for (int j=0;j<=2*sz[0];j++)
- {
- ans+=dp[0][i][j]*max(i,j);
- // if (n<6)
- // cout<<i<<"%"<<j<<" "<<dp[0][i][j]<<" "<<dp[0][i][j]*max(i,j)<<" "<<ans<<endl;
- }
- return ans;
- }
- };
Add Comment
Please, Sign In to add comment