CodeForces - 697D - Puzzles DFS
传送门: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的更多相关文章
- 【64.52%】【codeforces 697D】Puzzles
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- CodeForces - 696B Puzzles
http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...
- codeforces 734E(DFS,树的直径(最长路))
题目链接:http://codeforces.com/contest/734/problem/E 题意:有一棵黑白树,每次操作可以使一个同色连通块变色,问最少几次操作能使树变成全黑或全白. 思路:先进 ...
- codeforces 731C(DFS)
题目链接:http://codeforces.com/contest/731/problem/C 题意:有n只袜子(1~n),k种颜色(1~k),在m天中,左脚穿下标为l,右脚穿下标为r的袜子,问最少 ...
- codeforces 723D(DFS)
题目链接:http://codeforces.com/problemset/problem/723/D 题意:n*m的矩阵中,'*'代表陆地,'.'代表水,连在一起且不沿海的水形成湖泊.问最少填多少块 ...
- codeforces A. Puzzles 解题报告
题目链接:http://codeforces.com/problemset/problem/337/A 题意:有n个学生,m块puzzles,选出n块puzzles,但是需要满足这n块puzzles里 ...
- codeforces 377A. Puzzles 水题
A. Puzzles Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/problem/33 ...
- 【数学相关、规律】Codeforces 696B Puzzles
题目链接: http://codeforces.com/problemset/problem/696/B 题目大意: 给一棵树,从根节点开始递归,time=1,每次递归等概率随机访问这个节点的子节点, ...
- Military Problem CodeForces 1006E (dfs序)
J - Military Problem CodeForces - 1006E 就是一道dfs序的问题 给定一个树, 然后有q次询问. 每次给出u,k, 求以u为根的子树经过深搜的第k个儿子,如果一个 ...
随机推荐
- HashMap常见面试题整理
花了三天时间来仔细阅读hashMap的源码,期间补了下不少数据结构的知识,刷了不少相关的面试题并进行了整理 1.谈一下HashMap的特性? 1.HashMap存储键值对实现快速存取,允许为null. ...
- 大型系列课程之-七夕告白之旅vbs篇
也许,世间所有的美好的东西,都是需要仪式感的,遇到了一年一度的七夕节,怎么过这个节日,成了很多心中有爱的人关注的事情,七夕不浪漫,人间不值得,七夕,发源于中国,这个美好的节日,来自动人的神话故事传说牛 ...
- LASSO原作者的论文,来读读看
Regression Shrinkage and Selection via the lasso 众所周知,Robert Tibshirani是统计领域的大佬,这篇文章在1996年提出了LASSO,之 ...
- [NUnit]No results
Results (nunit3) saved as TestResult.xmlCommitting...No results, this could be for a number of reaso ...
- kubernetes API服务器的安全防护
12.1.了解认证机制 启动API服务器时,通过命令行选项可以开启认证插件. 12.1.1.用户和组 了解用户: 分为两种连接到api服务器的客户端: 1.真实的人 2.pod,使用一种称为Servi ...
- template.demo.js
<!DOCTYPE html><html><head> <title>index</title> <meta charset=&quo ...
- HTML/CSS:导航栏水平和垂直
1.垂直导航栏 导航栏 = 链接列表导航栏基本上是一个链接列表,因此使用 <ul> 和 <li> 元素是非常合适的.如需构建垂直导航栏,我们只需要定义 <a> 元素 ...
- Assign the task HDU - 3974 (dfs序 + 线段树)
有一家公司有N个员工(从1到N),公司里每个员工都有一个直接的老板(除了整个公司的领导).如果你是某人的直接老板,那个人就是你的下属,他的所有下属也都是你的下属.如果你是没有人的老板,那么你就没有下属 ...
- Eclipse高级操作 远程调试
Eclipse高级操作 远程调试 JPDA是SUN JDK自带的远程调试机制.它提供了一套标准的调试接口,可以从虚拟机一级允许外界用特定协议探测虚拟机内部的运作细节.只要你装了JDK1.2以上的SUN ...
- H5 Handlebars的简单使用
扫码关注公众号,不定期更新干活 web 开发中,js 解析JSON 是经常的事情.非常繁琐.handlebars 使用了模版,只要你定义一个模版,提供一个json对象,handlebars 就能吧js ...