• CodeForces 696B Puzzles


    题目大概意思就是求每个点标号的平均期望……

    我也是看了好多解法才稍微有点理解的……

    网上大神推出来的方程ans[v]=ans[i]+1+(num[i] - num[v] - 1) / 2 说实话 我推不出来……-_-||

    用两次dfs来求解……

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<math.h>
     5 #include<string.h>
     6 #include<string>
     7 #include<map>
     8 #include<vector>
     9 #include<queue>
    10 #define M(a,b) memset(a,b,sizeof(a))
    11 using namespace std;
    12 const int maxn=100005;
    13 int n,val;
    14 int num[maxn];
    15 double ans[maxn];
    16 vector<int>vec[maxn];
    17 void dfs1(int x){
    18     int len=vec[x].size();
    19     num[x]=len;
    20     for(int i=0;i<len;i++){
    21         int v=vec[x][i];
    22         dfs1(v);
    23         num[x]+=num[v];
    24     }
    25 }
    26 void dfs2(int x){
    27     int len=vec[x].size();
    28     for(int i=0;i<len;i++){
    29         int v=vec[x][i];
    30         ans[v]=ans[x]+1+(num[x]-num[v]-1)/2.0;
    31         dfs2(v);
    32     }
    33 }
    34 int main(){
    35     scanf("%d",&n);
    36     for(int i=0;i<=n;i++){
    37         vec[i].clear();
    38         num[i]=0;
    39     }
    40     for(int i=2;i<=n;i++){
    41         scanf("%d",&val);
    42         vec[val].push_back(i);
    43     }
    44     dfs1(1);
    45     ans[1]=1;
    46     dfs2(1);
    47     for(int i=1;i<=n;i++)
    48         printf("%lf%c",ans[i],i==n?'
    ':' ');
    49     return 0;
    50 }
  • 相关阅读:
    vue-cli的npm run build的常见问题
    es6 Symbol
    es6 对象的扩展
    es7 函数绑定
    es6 箭头函数
    学习weex遇见非常奇怪的问题
    微信
    java面试题
    PHP面试题
    Android
  • 原文地址:https://www.cnblogs.com/general10/p/5754591.html
Copyright © 2020-2023  润新知