問題の意味
あなたのルートノード1、ノードからそれぞれ出発し、1の各辺の長さをルートノードを、他の確率がそのサブツリーを取る木(問題、および無向グラフの非環式を読み取ることに注意)を得ました、葉が終了し、同じノード内の状態を介して所望の経路長を通して求め、もはや徒歩ではありません。
思考
ノードは、再びライン上でその父ノードなしで唯一の非環式を検討する必要性のために通過した後、ディープ・サブツリー長を検索し、その上の各ノードのサブツリーの数を記録することはできません。
コード
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
const int maxn=100000+10;
int n;
vector<int> G[maxn];
double dfs(int u,int root){
double res=0.0;
int cc=0;
for(int i=0;i<G[u].size();i++)
if(G[u][i]!=root) cc++;
if(cc==0) return 0.0;
for(int i=0;i<G[u].size();i++){
int v=G[u][i];
if(v==root) continue;
res+=dfs(v,u)+1.0;//每次走一步,长度加1
}
return res/cc;//返回期望路径长度
}
int main(){
cin>>n;
for(int i=0;i<n-1;i++){
int u,v;
cin>>u>>v;
G[u].push_back(v);
G[v].push_back(u);
}
double res=dfs(1,-1);
printf("%.15f\n",res);
return 0;
}
学如逆水行舟,不进则退