首页 > 其他分享 >Codeforces - 839C - Journey(图论 + 概率 + 搜索、*1500)

Codeforces - 839C - Journey(图论 + 概率 + 搜索、*1500)

时间:2022-10-31 19:01:54浏览次数:109  
标签:ld 概率 cout int 城市 Codeforces dfs 1500 Journey

839C - Journey(⇔源地址



目录






tag

⇔图论、⇔概率、⇔搜索、⇔*1500


题意

在七大王国里有 \(n\) 个城市和 \(n-1\) 条道路,每条道路连接两个城市,并且通过这些道路我们可以从任何一个城市到达任何一个城市。

席恩和阿莎在第一个城市骑上马,他们要通过这些路开始一次旅行。但是有雾,所以他们看不见他们的马带他们去了哪里。当马抵达一个城市的时候(包括第一个城市),它会去跟当前这个城市相连的城市。但是这是一匹奇怪的马,它只去他们以前没有去过的城市。在每个城市,马以相同的概率移动去上述符合要求的城市,并且当没有这样的城市(可走)时,马就停下了。

每条路的长度都是 \(1\),旅行从城市 \(1\) 开始,问这次旅行的期望长度(旅行长度的期望值)是多少?你可以通过这个链接来阅读一些关于期望(平均)值的文字。


思路

错误思路

首先上来一看,显然的搜索题,我以为题目是要求解到到叶子节点平均经过的举例,所以直接一个 \(\tt dfs\) 求解深度加上一个 \(\tt topsort\) 提取叶子节点算平均值了,样例坑的离谱,跑起来完全没感觉到有问题,然后光荣的WA了。

正解

这是一道图论+概率 \(\tt DP\) 的题目,特此写博文记录一下。

我们知道,期望等于概率乘以值,这道题中:

  • 概率即为到达这个点的概率:已知某个点 \(i\) ,到达其子节点 \(son_i\) 的概率即为 \(\dfrac{P(i)}{子节点数量}\) ;
  • 值即为这个点的深度。

所以直接用一个 \(\tt dfs\) 来维护这两个东西即可,没有别的套路了。


AC代码

点击查看代码
namespace Geometry { //几何
    using ld = long double;
    const ld PI = acos(-1);
    const ld EPS = 1e-7;
    template <class T, class S> inline bool equal(T x, S y) {
        return x - y < EPS && x - y > -EPS;
    }
    //    cout << fixed << setprecision(12);
}
using namespace Geometry;
namespace G {
    vector<int> ver[N];
    int deg[N], d[N];
    ld ans;
    
    void add(int x, int y) {
        ver[x].push_back(y);
        ++ deg[y];
    }
    void dfs(int x, int fa, ld p) {
        int siz = 0;
        for (auto y : ver[x]) {
            if (y == fa) continue;
            ++ siz;
        }
        for (auto y : ver[x]) {
            if (y == fa) continue;
            d[y] = d[x] + 1;
            dfs(y, x, p / siz);
        }
        if (siz == 0) ans += p * d[x];
    }
}
signed main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    
    cout << fixed << setprecision(15);
    
    int n; cin >> n;
    for (int i = 1; i < n; ++ i) {
        int x, y; cin >> x >> y;
        G::add(x, y), G::add(y, x);
    }
    G::dfs(1, -1, 1);
    cout << G::ans;
    
    return 0;
}

错误次数:2

第一发思路如上,稀碎;第二发改进了一下 \(n=1\) 的情况。






文 / WIDA

  1. 成文
    首发于WIDA个人博客,仅供学习讨论

标签:ld,概率,cout,int,城市,Codeforces,dfs,1500,Journey
From: https://www.cnblogs.com/WIDA/p/16845369.html

相关文章

  • Codeforces Round #658 (Div. 1) B
    B.Unmerge看完样例发现31243后面跟着的12肯定是和3一组的因为他们不如3大所以他们一定是被直接排出来的就这样我们可以将这个序列分成好多组然后就是金典背包......
  • Codeforces Round #683 (Div. 1, by Meet IT) B
    B.CatchingCheaters对于我们做过的模板提来说这道题是子串那显然我们要改变一下我们的状态表示dp[i][j]表示以ai,bj结尾的max我们状态转移就是dp[i][j]=max{dp[i-1]......
  • Educational Codeforces Round 110 (Rated for Div. 2) D
    D.PlayoffTournament观察完题发现没改变一个只会修改自己及以上的权值所以我们直接暴力qlogn但是这个题恶心的就是他那个是倒着给的我们要reverse一遍注意这时候......
  • codeforces 1734C、1733D1、1733C、1730C、1729D
    1、1734CRemovingSmallestMultiples题意:给予你一个数组S,其中包含前n个正整数你可以在S上执行以下操作任多次(包含0次):1、选择一个正整数i,(1<=k<=n),并且使得数组S中......
  • Codeforces Round #826 (Div. 3)
    题目链接CodeforcesRound#826(Div.3)F.Multi-ColoredSegmentsMulti-ColoredSegments题面翻译给定一维数轴上\(n\)条线段,每条线段都有给定的颜色\(c_i\)。对......
  • 1500套HTML+CSS+JS网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设
    一、1500套HTML期末学生结课大作业作品(HTML+CSS+JS)这8年来做了1000多套(HTML+CSS+JS)网页设计的学生期末大作业,都是给学生定制的都符合学校或者学生考试期末作业的水平,都......
  • Codeforces Round #831 (Div. 1 + Div. 2) A-E
    比赛链接A题解知识点:数学。\(2\)特判加\(7\),其他加\(3\)直接偶数。时间复杂度\(O(1)\)空间复杂度\(O(1)\)代码#include<bits/stdc++.h>#definelllonglo......
  • Codeforces Round #828 (Div. 3)
    题目链接CodeforcesRound#828(Div.3)DivisibleNumbers(hardversion)题目描述给出四个整数\(a,b,c,d\),请你构造一对整数\((x,y)\),满足:\(a<x\leqc......
  • Codeforces Round #831 (Div. 1 + Div. 2)
    CodeforcesRound#831(Div.1+Div.2)1.Problem-D-Codeforces首先是一个结论就是如果除了起点终点以外你发现只要是还多一个格子你是可以把所有牌都任意移动的。......
  • Codeforces Round #831 (Div. 1 + Div. 2) E
    E.HangingHearts我们观察每一个节点它可以由其子节点的所有长链来构造还有就是直接可以由自己构成的一条长链所以对于每一个节点我们的答案就是max(加上自己的最长链......