Codeforces - Minimum Diameter Tree

题目链接: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万+

猜你喜欢

转载自blog.csdn.net/weixin_43826249/article/details/104407692