zoukankan      html  css  js  c++  java
  • D. Minimum Diameter Tree Round #528 (Div. 2)【树】

    一、题面

    题目链接

    二、分析

    该题注意读题的时候有强调边的权值为非负(即可以为0),此题就是求树两个叶子节点之间的最短距离。为了使两个叶子节点之间的距离最短,那么其实就是让每个最后到叶子的那条路径尽量去平摊更多的权值,因为只有这样才能保证最长的哪个路径值是最小的。相当于除了到叶子的路径,其他路径权值都是0。为什么?因为假设其他路径有权值,那么经过这条路径的两个叶子之间的最大距离肯定不是所有情况中最小的。它除了要加到叶子的路径权重还要加该路径权重。

    如果你认为可以给这两个到叶子的路径给尽量小的权重,那么相当于打破了平衡,肯定会有更大的最大权重和路径。

    三、AC代码

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 const int MAXN = 1e5+4;
     5 int Data[MAXN];
     6 
     7 int main()
     8 {
     9     int N, W;
    10     while(scanf("%d %d", &N, &W)!=EOF)
    11     {
    12         int x, y, cnt = 0;
    13         double ans;
    14         memset(Data, 0, sizeof(Data));
    15         for(int i = 1; i < N; i++)
    16         {
    17             scanf("%d %d", &x, &y);
    18             Data[x]++;
    19             Data[y]++;
    20         }
    21         for(int i = 1; i <= N; i++)
    22         {
    23             if(Data[i] == 1)
    24                 cnt++;
    25         }
    26         ans = W*1.0/cnt*2.0;
    27         printf("%.12f
    ", ans);
    28     }
    29     return 0;
    30 }
    View Code
  • 相关阅读:
    Git 游离态的一次问题解决
    idea每次新建项目的默认路径
    springboot 整合 freemarker
    Linux 学习网站
    springtask 基本使用和 cron 表达式
    volatile 关键字 和 i++ 原子性
    python 自动补全
    nagios维护之常见问题
    nagios维护之添加监控
    windows下python文件与文件夹操作
  • 原文地址:https://www.cnblogs.com/dybala21/p/10171450.html
Copyright © 2011-2022 走看看