首页 > 其他分享 >Codeforces 280C Game on Tree

Codeforces 280C Game on Tree

时间:2023-05-02 20:36:32浏览次数:39  
标签:fa int 280C Tree dfs dep Game 涂色 ans

设 \(p_i\) 为 \(i\) 涂色或不涂色,\(1\) 为涂,\(0\) 为不涂,答案即为 \(E[\sum_{i = 1}^n p_i]\)
然后转化一下柿子:\(\sum_{i=1}^nE[p_i]\),这就很好求了,单独求每个点 \(E[p_i]\) 的值就行了

考虑对于 \(u\) 点,\(p_u = 1\),即能被涂需要满足其祖先都比其晚涂色
假设现在有一个序列里面随机排列着这 \(n\) 个点,把 \(u\) 和其祖先都拿出来,则总共有 \(dep_u!\) 种方案,现在固定 \(u\) 排最前面,则方案数为 \((dep_u - 1)!\),所以 \(E[p_u] = 1\times \frac{(dep_u - 1)!}{dep_u!} = \frac{1}{dep_u}\)

跑一个 dfs 就行了,时间复杂度 \(O(n)\)

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
vector<int> to[N];
void add(int u, int v) {
    to[u].push_back(v);
    return ;
}
int dep[N];
double ans;
void dfs(int u, int fa) {
    ans += 1.0 / (dep[u] = dep[fa] + 1);
    for (int v : to[u]) {
        if (v == fa) {
            continue;
        }
        dfs(v, u);
    }
    return ;
}
int main() {
    int n;
    scanf("%d", &n);
    for (int i = 1; i < n; i++) {
        int x, y;
        scanf("%d%d", &x, &y);
        add(x, y); add(y, x);
    }
    dfs(1, 0);
    printf("%.20lf", ans);
    return 0;
}

标签:fa,int,280C,Tree,dfs,dep,Game,涂色,ans
From: https://www.cnblogs.com/lhzawa/p/17368207.html

相关文章

  • CF911F Tree Destruction
    题意:给你一棵\(n\)个结点组成的树,你需要对树进行\(n-1\)次操作,一次操作包含如下的步骤:选择两个叶子结点将这两个结点之间简单路径的长度加到答案中从树上删去两个叶子结点之一初始答案为\(0\),显然在\(n-1\)次操作之后树上只剩下一个结点。计算最大的答案,并构造一组......
  • AtCoder Regular Contest 122 D XOR Game
    洛谷传送门AtCoder传送门从高到低按位考虑。设当前位有\(k\)个\(1\)。如果\(k\bmod2=0\),这意味着Alice如果选了一个数,Bob可以选相同的数。发现可以分成\((0,0),(1,1)\)两组,递归下去即可。如果\(k\bmod2=1\),意味着答案这一位一定是\(1\)(因为无论如何都不......
  • J - Simple Game (博弈论外壳下的模运算考察题目)
    原题链接:https://vjudge.net/contest/555710#problem/J手工翻译:Alice和Bob在玩一个游戏有这样一个数列a1,a2,a3,a4……an长度为n,他们轮流移走一个整数当数列中没有可移走的整数时游戏结束,Alice移走的数的和是S1,Bob移走的数的和是S2如果abs(s1-s2)为奇数,Alice赢,否则Bob赢接下来给......
  • odoo tree下直接编辑, 免跳转form
      <recordid="mypartner_tree_view"model="ir.ui.view"><fieldname="name">Mypartner清单</field><fieldname="model">mypartner</field><fieldname="arch&......
  • [ABC148F] Playing Tag on Tree
    2023-03-04题目题目传送门翻译翻译难度&重要性(1~10):5题目来源AtCoder题目算法最短路解题思路考虑到T想活得久,A想尽早追上T,所以我们就将问题转化为在树上找一条最长链,使得T能比A先到达这条链。所以我们就可以在树上跑两遍单源最短路,因为边权为\(1\),所以......
  • CF 1709E XOR Tree(树上启发式合并)
    题目链接:https://codeforces.com/contest/1709/problem/E解题思路:定义sum(x,y)为x→y路径上的点的异或和,dx 为x→root路径上的点的异或和。对于一个点权树,sum(x,y)=dx ^dy ^vallca(x,y)。考虑修改一个点,可以将它改为一个很大的2为底数的幂,则经过此点的所有的不合......
  • AtCoder Regular Contest 117 D Miracle Tree
    洛谷传送门AtCoder传送门第一步就没想到可以考虑化简限制。设所有点按\(E_i\)从小到大排序后顺序是\(p_1,p_2,...,p_n\)。发现只需满足\(E_{p_{i+1}}-E_{p_i}\ge\operatorname{dis}(p_i,p_{i+1})\)。证明是对于任意\(i<j<k\),若\(p_i,p_j\)和\(p_j,p_k\)均满......
  • Codeforces 1799H - Tree Cutting(树形 dp)
    思考的时候一直卡在不会在低于\(O(n)\)的时间内储存一个连通块的\(siz\)有关的信息,看了洛谷题解之后才发现我真是个小丑。树形DP。对于一条我们需要操作的边\((i,fa_i)\),我们将其分为保留子树和删除子树两种类型,对于删除子树,我们在判定其是否合法时候改为判定删除的连通块......
  • AtCoder Regular Contest 116 F Deque Game
    洛谷传送门AtCoder传送门很强的博弈+性质题。下文令A为Takahashi,B为Aoki。发现单独考虑一个序列\(a_1,a_2,...,a_n\):若\(n\bmod2=0\):若A为先手,答案为\(\max(a_{\frac{n}{2}},a_{\frac{n}{2}+1})\);若B为先手,答案为\(\min(a_{\frac{n}{2}},a_{\frac......
  • 二叉树Binary Tree
    二叉树BinaryTree1.树的一些常用术语2.二叉树的概念树有很多种,每个节点最多只能有两个子节点的一种形式称为二叉树;二叉树的子节点分为左子节点和右子节点;以下三种均为二叉树:若该二叉树的所有叶子节点都在最后一层,且节点总数n==\(2^k\)-1,k为层数,则称为满二叉树......