题目链接
题目解法
这道题显然没法硬算
我们考虑期望的线性性
E(删去每个点的期望)= E(删去i的期望)
每个点被删去的期望显然是
所以答案就是
#include <bits/stdc++.h>
using namespace std;
const int N(100100);
int n,m,depth[N];
vector<int> vec[N];
inline int read(){
int FF=0,RR=1;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
RR=-1;
for(;isdigit(ch);ch=getchar())
FF=(FF<<1)+(FF<<3)+ch-48;
return FF*RR;
}
void dfs(int u,int fa){
for(int i=0;i<vec[u].size();i++){
int v=vec[u][i];
if(v!=fa){
depth[v]=depth[u]+1;
dfs(v,u);
}
}
}
int main(){
n=read();
for(int i=1,x,y;i<n;i++){
x=read(),y=read();
vec[x].push_back(y);
vec[y].push_back(x);
}
depth[1]=1;
dfs(1,-1);
double ans=0;
for(int i=1;i<=n;i++)
ans+=1.0/depth[i];
printf("%.10lf",ans);
return 0;
}