题目链接:Codeforces - Minimum Diameter Tree
我们把权值均分给叶子附近的边权即可。为什么正确呢?
假设我们把某一靠近叶子的边权分给其他靠近叶子的,肯定增大。
如果分给非叶子的边,那么其他叶子之间通过这条边肯定也增大。
AC代码:
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=1e5+10;
int n,s,deg[N],cnt;
signed main(){
cin>>n>>s;
for(int i=1,a,b;i<n;i++) scanf("%d %d",&a,&b),deg[a]++,deg[b]++;
for(int i=1;i<=n;i++) if(deg[i]==1) cnt++;
printf("%.10lf\n",2.0*s/cnt);
return 0;
}
青烟绕指柔!
发布了604 篇原创文章 · 获赞 242 · 访问量 4万+
私信
关注