博客
关于我
E - Another Postman Problem FZU - 2038
阅读量:505 次
发布时间:2019-03-07

本文共 1603 字,大约阅读时间需要 5 分钟。

树结构中的每个边都被计算在多少对点之间的路径中,然后用边权乘以这些对数,求和即可得到总距离和。

树的每条边连接两个子树,左侧有a个节点,右侧有b个节点(a + b = n)。这些边会被a*b对点经过,因此其中权值w的总贡献是w * a * b。

总距离和即为所有边的w * a * b的总和。

最终,通过DFS遍历树,统计每条边分割后的子树大小,计算总和即可。

经过优化后的解释文章:

树结构中的每条边被多少对节点连接的路径经过,计算方法如下:

  • 将每条边看作连接两个子树,左侧具有a个节点,右侧具有b个节点(a + b = n)。
  • 每条边会被a * b对节点之间的路径经过。
  • 因此,每条边对总距离和的贡献为权值w * a * b。
  • 计算所有边的贡献总和即为结果。
  • 实现方法是深度优先搜索,每条边的子树大小统计后,计算每条边的贡献并求和。

    代码改造后:

    #include 
    #include
    using namespace std;struct Edge { int to, w; Edge(int t, int w) : to(t), w(w) {}};vector
    children = {{-1}};ll dfs(int u, int parent) { int sz = 1; for (int v : children[u]) { if (v == parent) continue; sz++; sz += dfs(v, u); } return sz;}void solve() { int n = 3; // 定义树的节点数 vector
    adj = {{-1}, {0}, {1}}; // 1-2-3 // 填充相应的边信息 // 直接计算每条边的贡献 nums = sum(w_e * a * b) // 这里通过遍历每个边,得到两边总节点数 int ans = 0; return ans;}int main() { solve(); return 0;}

    代码简化为:

    #include 
    #include
    using namespace std;struct zuobiao { int to, w; zuobiao(int t, int w) : to(t), w(w) {}};vector
    children = {{-1}};ll dfs(int u, int parent) { int sz = 1; for (int v : children[u]) { if (v == parent) continue; sz++; sz += dfs(v, u); } return sz;}void solve() { int n = 3; vector
    > adj = {{1, 2}, {2, 3}}; // 边信息 int ans = 0; for (auto& edge : adj) { int a = dfs(edge.second, -1); int b = n - a; ans += edge.first * a * b; } cout << ans; // 输出结果}int main() { solve(); return 0;}

    转载地址:http://wggjz.baihongyu.com/

    你可能感兴趣的文章
    Error: Flash Download failed - Cortex-M4
    查看>>
    前端学习之路
    查看>>
    008.Python基础语法(七)——序列数据类型
    查看>>
    centos 7 使用 163 yum 源
    查看>>
    Linux稀疏文件查看实际占用空间
    查看>>
    Python 强大的try-except-pass
    查看>>
    Weblogic 10.3.6 账户登录密码错误默认锁定策略
    查看>>
    Skype 与 Skype for Business 之间有何区别?
    查看>>
    使用AIDE检查完整性
    查看>>
    1534. 统计好三元组
    查看>>
    数据库图形化客户端工具DBeaver
    查看>>
    Unity3D看得见_游戏中的图形渲染优化_经典实用
    查看>>
    真Unity3d_屏幕UI_2d转3d纯代码
    查看>>
    vscode中快速生成vue模板
    查看>>
    HTML5 Web Storage
    查看>>
    Windows上CLion的配置
    查看>>
    210所高校21届保研率曝光!这些211保研率堪比985!
    查看>>
    uniapp配置去掉友盟无法打包,提示配置错误如何解决
    查看>>
    网狐客户端-win32
    查看>>
    Ubuntu 20.10 QT 5.12.2 cannot find -lGL错误解决
    查看>>