传送门:D - Puzzles

题意:在一个图中,从1开始dfs,求每一个点到达的期望;

思路:(下面是队长写的)

首先求的是到每一个点的步数的期望.

记fa( u ) = v, son( v )表示v的儿子的集合,

z是son(v)中的点,其中 z != u ,  sum[z] 为 z 的子树的大小, p( z )表示z比u先访问到的概率;

那么可以发现对于u来说 ans[u] = ans[v] + 1 + x;

现在我要来算这个x, 如果 son(v).size == 1, 那么x为0;

否则能对u造成影响的就是son(v)中不是u的那些点,

以z为例, 如果z先于u访问到,那么到达u的步数就会加上sum[z], 那么 x += sum[z] * p(z);

可以发现这样一个规律对于son(v)任意一种排列a,都可以发现一种对应排列b,满足a和b中只有u和z的位置对换.而且u和v不可能同时被访问或者其中一个不被访问,那么可以得到p(z) = 0.5; 就是 x += sum[z] * 0.5;

那么x就可以算出来了: for(auto it : son[v]) x += sum[it] * 0.5;

时间复杂度O(n);

所以下面的ac代码中,dfs1()就是求每一个点的sum值,通过类似前缀和的思想;

          get1()就是求ans;

#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std; const int maxn = ; int n,sum[maxn];
vector<int>mp[maxn];
double ans[maxn];
void init(){
for(int i=;i<=n;i++)
mp[i].clear();
memset(ans,,sizeof(ans));
memset(sum,,sizeof(sum));
}
void dfs1(int d)
{
sum[d] = ;
for(int t=; t < mp[d].size(); t++)
{
int to = mp[d][t];
dfs1(to);
sum[d] += sum[to];
}
}
void get1(int d)
{
for(int t=; t<mp[d].size(); t++)
{
int to = mp[d][t];
ans[to] = ans[d] + + (sum[d]-sum[to]-) * 0.5;
get1(to);
}
}
int main(){
// freopen("in","r",stdin);
while(~scanf("%d", &n))
{
init();
for(int i=; i<=n; i++)
{
int x;
scanf("%d",&x);
mp[x].push_back(i);
}
dfs1();
ans[] = 1.0;
get1();
for(int i=; i<=n; i++)
{
printf("%.1f%c", ans[i], i==n?'\n':' ');
}
}
return ;
}

CodeForces - 697D - Puzzles DFS的更多相关文章

  1. 【64.52%】【codeforces 697D】Puzzles

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  2. CodeForces - 696B Puzzles

    http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...

  3. codeforces 734E(DFS,树的直径(最长路))

    题目链接:http://codeforces.com/contest/734/problem/E 题意:有一棵黑白树,每次操作可以使一个同色连通块变色,问最少几次操作能使树变成全黑或全白. 思路:先进 ...

  4. codeforces 731C(DFS)

    题目链接:http://codeforces.com/contest/731/problem/C 题意:有n只袜子(1~n),k种颜色(1~k),在m天中,左脚穿下标为l,右脚穿下标为r的袜子,问最少 ...

  5. codeforces 723D(DFS)

    题目链接:http://codeforces.com/problemset/problem/723/D 题意:n*m的矩阵中,'*'代表陆地,'.'代表水,连在一起且不沿海的水形成湖泊.问最少填多少块 ...

  6. codeforces A. Puzzles 解题报告

    题目链接:http://codeforces.com/problemset/problem/337/A 题意:有n个学生,m块puzzles,选出n块puzzles,但是需要满足这n块puzzles里 ...

  7. codeforces 377A. Puzzles 水题

    A. Puzzles Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/problem/33 ...

  8. 【数学相关、规律】Codeforces 696B Puzzles

    题目链接: http://codeforces.com/problemset/problem/696/B 题目大意: 给一棵树,从根节点开始递归,time=1,每次递归等概率随机访问这个节点的子节点, ...

  9. Military Problem CodeForces 1006E (dfs序)

    J - Military Problem CodeForces - 1006E 就是一道dfs序的问题 给定一个树, 然后有q次询问. 每次给出u,k, 求以u为根的子树经过深搜的第k个儿子,如果一个 ...

随机推荐

  1. HashMap常见面试题整理

    花了三天时间来仔细阅读hashMap的源码,期间补了下不少数据结构的知识,刷了不少相关的面试题并进行了整理 1.谈一下HashMap的特性? 1.HashMap存储键值对实现快速存取,允许为null. ...

  2. 大型系列课程之-七夕告白之旅vbs篇

    也许,世间所有的美好的东西,都是需要仪式感的,遇到了一年一度的七夕节,怎么过这个节日,成了很多心中有爱的人关注的事情,七夕不浪漫,人间不值得,七夕,发源于中国,这个美好的节日,来自动人的神话故事传说牛 ...

  3. LASSO原作者的论文,来读读看

    Regression Shrinkage and Selection via the lasso 众所周知,Robert Tibshirani是统计领域的大佬,这篇文章在1996年提出了LASSO,之 ...

  4. [NUnit]No results

    Results (nunit3) saved as TestResult.xmlCommitting...No results, this could be for a number of reaso ...

  5. kubernetes API服务器的安全防护

    12.1.了解认证机制 启动API服务器时,通过命令行选项可以开启认证插件. 12.1.1.用户和组 了解用户: 分为两种连接到api服务器的客户端: 1.真实的人 2.pod,使用一种称为Servi ...

  6. template.demo.js

    <!DOCTYPE html><html><head> <title>index</title> <meta charset=&quo ...

  7. HTML/CSS:导航栏水平和垂直

    1.垂直导航栏 导航栏 = 链接列表导航栏基本上是一个链接列表,因此使用 <ul> 和 <li> 元素是非常合适的.如需构建垂直导航栏,我们只需要定义 <a> 元素 ...

  8. Assign the task HDU - 3974 (dfs序 + 线段树)

    有一家公司有N个员工(从1到N),公司里每个员工都有一个直接的老板(除了整个公司的领导).如果你是某人的直接老板,那个人就是你的下属,他的所有下属也都是你的下属.如果你是没有人的老板,那么你就没有下属 ...

  9. Eclipse高级操作 远程调试

    Eclipse高级操作 远程调试 JPDA是SUN JDK自带的远程调试机制.它提供了一套标准的调试接口,可以从虚拟机一级允许外界用特定协议探测虚拟机内部的运作细节.只要你装了JDK1.2以上的SUN ...

  10. H5 Handlebars的简单使用

    扫码关注公众号,不定期更新干活 web 开发中,js 解析JSON 是经常的事情.非常繁琐.handlebars 使用了模版,只要你定义一个模版,提供一个json对象,handlebars 就能吧js ...