- Minimum Diameter Tree
- 题意:给一个总权值 S 给一个 无向图的树 ,把 S 分到树的边权上。随意分只要总和为S即可。
- 思路:把S平均分到 叶子节点上即可。 这样直径就是 S/叶子数 * 2 ,只有这样才能使最后直径最小
- 不能 更小了,一段减小肯定有另一段增加 ,导致直径发上变化,所以只能均分到叶子节点
-
#include<bits/stdc++.h> using namespace std; #define maxn 123456 int p[maxn],n,m,a,b,sum; double ans; int main() { scanf("%d%lf",&n,&ans); for(int i=1; i<n; i++) { scanf("%d%d",&a,&b); p[a]++; p[b]++; } for(int i=1; i<=n; i++) if(p[i]==1)sum++; ans/=sum; ans*=2; printf("%lf\n",ans); return 0; }
Minimum Diameter Tree-思维-贪心
最新推荐文章于 2025-04-21 22:09:55 发布