ZROJ#398. 【18提高7】随机游走(期望dp 树形dp)
2018-10-15 18:04
435 查看
题意
[题目链接]版权原因就不发了。。
给出一棵树,求出任意两点之间期望距离的最大值
Sol
比较清真的一道题吧。。
设\(f[x]\)表示从\(x\)走到\(x\)的父亲的期望步数
\(g[x]\)表示从父亲走来的期望步数
\(d[x]\)表示\(x\)节点的度数
不难得到方程\(f[x] = \sum_{to \in son[x]} f[to] + d[x]\)
\(g[x] = g[fa[x]] + \sum_{to \in son[fa[x]] \text{且} to \not = x} f[to] + d[fa[x]]\)
最后计算的时候维护向上向下最大值即可
当然,仔细观察不难发现\(f[x]\)即为子树中所有节点的度数
\(g[x]\)为整棵树中除子树外节点的度数
考虑每条边的贡献后不难得到
\(f[x] = 2 * siz[x] - 1\)
\(g[x] = 2 * (N - siz[x]) - 1\)
#include<bits/stdc++.h> #define chmax(a, b) (a = a > b ? a : b) #define LL long long const int MAXN = 1e5 + 10; inline int read() { char c = getchar(); int x = 0, f = 1; while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();} while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar(); return x * f; } std::vector<int> v[MAXN]; int N, up[MAXN], down[MAXN], d[MAXN], siz[MAXN], ans, f[MAXN], g[MAXN]; void dfs3(int x, int fa) { siz[x] = 1; for(int i = 0, to; i < v[x].size(); i++) { if((to = v[x][i]) == fa) continue; dfs3(to, x); siz[x] += siz[to]; ans = std::max(ans, std::max(up[x] + g[to] + down[to], down[x] + f[to] + up[to])); chmax(up[x], up[to] + f[to]); chmax(down[x], down[to] + g[to]); // chmax(ans, up[x] + down[x]); } f[x] = (siz[x] << 1) - 1; g[x] = ((N - siz[x]) << 1) - 1; } int main() { N = read(); for(int i = 1; i < N; i++) { int x = read(), y = read(); d[x]++; d[y]++; v[x].push_back(y); v[y].push_back(x); } dfs3(1, 0); printf("%lld", ans); puts(".00000"); return 0; }
相关文章推荐
- 【NOIP2016提高A组集训第14场11.12】随机游走——期望+树形DP
- loj2542 「PKUWC2018」随机游走 【树形dp + 状压dp + 数学】
- 【BZOJ3566】【SHOI2014】概率充电器(树形期望DP)
- BZOJ 3566: [SHOI2014]概率充电器 期望DP + 树形DP
- 蓝桥杯 算法提高 结点选择(树形DP)
- [BZOJ3566]-[SHOI2014]概率充电器-期望+树形dp
- 【NOIP2016提高A组集训第14场11.12】随机游走
- codeforces round 362 div2 D Puzzles 树形dp + 期望
- 树上随机游走的期望距离
- 【转载】【树形DP】【数学期望】Codeforces Round #362 (Div. 2) D.Puzzles
- codeforces 697D Puzzles (树形dp 期望 推荐)
- 【NOIP2016提高A组集训第14场11.12】随机游走
- poj 2057 树形DP,数学期望
- 随机游走的期望距离
- CodeForce 280C Game on Tree -- 树形dp求期望
- JZOJ4890. 【NOIP2016提高A组集训第14场11.12】随机游走
- 算法提高 金属采集 树形DP
- 4890. 【NOIP2016提高A组集训第14场11.12】随机游走 (2017.10B组)
- 【Codeforces Round 275 (Div 2)E】【状压DP 概率DP求期望 线性相加思想 二进制系统函数】Game with Strings n个串目标串随机猜位置随机的猜出答案的期望步
- Codeforces 839C Journey (树形dp + 概率期望)