日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Search For Mafuyu dfs,树的遍历,期望(济南)

發(fā)布時間:2025/3/19 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Search For Mafuyu dfs,树的遍历,期望(济南) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


題意 :

  • 給定一棵n個點的樹,A在1號點,B的位置在2-n中均勻隨機(jī),A不知道B的位置,現(xiàn)在A要去找B,每秒可以走到一個相鄰點,求在最優(yōu)策略(optimaloptimaloptimal strategystrategystrategy)下的期望時間

思路 :

  • 等概率出現(xiàn),因此直接把所有(2-n)結(jié)點需要的次數(shù)累加后除以(n?1n-1n?1
  • 先假設(shè)走的路徑是一個歐拉遍歷。容易發(fā)現(xiàn)交換一個點的兩顆子樹答案不變
  • 有了上述結(jié)論之后,容易證明最優(yōu)解確實是一個歐拉遍歷,也就是不會半途返回
  • 按任意順序DFS即可,時間復(fù)雜度O(n)O(n)O(n)
  • 樹的遍歷只要傳入父節(jié)點即可,不需要vis數(shù)組
  • dfs的方案就是每次回溯回來后cnt還是加一,這樣就能構(gòu)造“走回”的效果;
  • 還要注意一開始cnt初始化為-1,因為在第一個點是第0s
#include <iostream> #include <vector> #define pb push_backusing namespace std;const int N = 110;int n; vector<int> g[N]; int cnt = -1, ans;void dfs(int u, int fa) {cnt ++ ;ans += cnt;for (int i = 0; i < g[u].size(); i ++ ){int v = g[u][i];if (v == fa) continue;dfs(v, u);cnt ++ ;} }int main() {int _ = 1;scanf("%d", &_);while (_ -- ){scanf("%d", &n);for (int i = 1; i <= n; i ++ ) g[i].clear();cnt = -1, ans = 0;for (int i = 0, u, v; i < n - 1; i ++ ){scanf("%d%d", &u, &v);g[u].pb(v), g[v].pb(u);}dfs(1, 0);printf("%.10lf\n", ans * 1.0 / (n - 1));} }

總結(jié)

以上是生活随笔為你收集整理的Search For Mafuyu dfs,树的遍历,期望(济南)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。