Codeforces 697D

Posted tiberius

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 697D相关的知识,希望对你有一定的参考价值。

题意略。

思路:

对于随机产生的一个数列,对于某个儿子,其兄弟在其前面的概率为 1 / 2。

所以这个兄弟对期望的贡献为son[v] / 2,所有兄弟加起来即为(tot - 1) / 2。

 

详见代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;

int son[maxn],n,fa;
vector<int> graph[maxn];
double ans[maxn];

void dfs(int cur){
    son[cur] = 1;
    for(int i = 0;i < graph[cur].size();++i){
        int v = graph[cur][i];
        dfs(v);
        son[cur] += son[v];
    }
}
void dfs1(int cur,double cur_e){
    double tot = son[cur] - 1;
    for(int i = 0;i < graph[cur].size();++i){
        int v = graph[cur][i];
        ans[v] = 1 + cur_e + (tot - son[v]) / 2;
        dfs1(v,ans[v]);
    }
}

int main(){
    int n;
    scanf("%d",&n);
    for(int i = 2;i <= n;++i){
        scanf("%d",&fa);
        graph[fa].push_back(i);
    }
    dfs(1);
    ans[1] = 1;
    dfs1(1,1);
    for(int i = 1;i <= n;++i){
        printf("%lf%c",ans[i],i == n ? 
 :  );
    }
    return 0;
}

 

以上是关于Codeforces 697D的主要内容,如果未能解决你的问题,请参考以下文章

[Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3)][C. Playing Piano](代码片段

c_cpp Codeforces片段

Codeforces 86C Genetic engineering(AC自动机+DP)

CodeForces 1005D Polycarp and Div 3(思维贪心dp)

(Incomplete) Codeforces 394 (Div 2 only)

CodeForces 931F Teodor is not a liar!