문제의 의미
루트 노드 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;
}
学如逆水行舟,不进则退