D. Minimum Diameter Tree 思维+猜结论

D. Minimum Diameter Tree 思维+猜结论

题意

给出一颗树 和一个值v 把该值任意分配到任意边上 使得\(\sum\limits_{i,j}p_{ij}=v\)
使得 这颗树任意两个点的简单路的最大值最小

思路

根据样例我们可以很好得蒙出 只要平均分在度数位1的点所连的边上面就可以了
树猜结论无非是度数 边关系之类的

#include<bits/stdc++.h>
#define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;i++)
#define MS(arr,arr_value) memset(arr,arr_value,sizeof(arr)) 
#define F first 
#define S second
#define pii pair<int ,int >
#define mkp make_pair
#define pb push_back
#define arr(zzz) array<ll,zzz>
using namespace std;
typedef long long ll;
const int maxn=3e5+5;
int n,m,y;
int a[maxn];
int indgree[maxn];
int main(){
	int n,s;
	scanf("%d%d",&n,&s);
	int x,y;
	for(int i=1;i<n;i++){
		scanf("%d%d",&x,&y);
		indgree[x]++;
		indgree[y]++;
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		if(indgree[i]==1){
			ans++;
		}
	}
	printf("%.18f\n",2.0*s/ans);
	return 0;
}
posted @ 2019-05-01 16:29  tttttttttrx  阅读(187)  评论(0编辑  收藏  举报