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;
}
Codeforces - Minimum Diameter TreeCodeforces - Minimum Diameter Tree 青烟绕指柔! 发布了604 篇原创文章 · 获赞 242 · 访问量 4万+ 私信 关注
上一篇:JS进阶面试题整理(仅仅整理我做错的题)


下一篇:前端每日实战:99# 视频演示如何用纯 CSS 创作一个过山车 loader