删边(delete)

题目

题目描述

给你一棵n个结点的树,每个结点有一个权值,删除一条边的费用为该边连接的两个子树中结点权值最大值之和。现要删除树中的所有边,删除边的顺序可以任意设定,请计算出所有方案中的最小花费。

输入格式

输入文件名为 delete.in。

第一行包含整数n,表示结点数。结点用从1到n表示。

第二行包含n个整数ti(1≤ti≤109)。数字ti表示结点i的权值。

接下来n−1行,每行包含两个整数x和y(1≤x,y≤n),表示结点x和结点y直接相连。

输出格式

输出文件名为 delete.out。

输出最小花费。

题解

题目大意:有一棵树,删去一条边的代价是这条边两端子树里各自权值最大值之和,安排删边顺序使得代价最小,输出最小代价

一道结论题,没什么好说的

\(ans=\sum t_{i}-\max \left\{t_{i}\right\}+\sum \max \left(t_{x_{i}}, t_{y_{i}}\right)\)

证明自行思考

Code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
ll n,x,y,ans,mx,c[100001];
int main()
{
freopen("delete.in","r",stdin);
freopen("delete.out","w",stdout);
scanf("%lld",&n);
for (int i=1;i<=n;++i)
scanf("%lld",&c[i]),ans+=c[i],mx=max(mx,c[i]);
for (int i=1;i<n;++i)
{
scanf("%lld%lld",&x,&y);
ans+=max(c[x],c[y]);
}
printf("%lld\n",ans-mx);
fclose(stdin);
fclose(stdout);
return 0;
}

最新文章

  1. iOS学习之block
  2. 编译器 expected unqualified-id before numeric constant 错误
  3. 如何myEclipse修改工程项目的运行环境和编译环境
  4. HDU1048The Hardest Problem Ever
  5. Maven-编译打包
  6. Android FragmentActivity+viewpager的使用
  7. Mojo 分析日志接口
  8. RAISERROR
  9. UVA1601 状态搜索
  10. mysql常用基础操作语法(一)~~对库的操作【命令行模式】
  11. K2开发中,遇到用户无权限OPEN当前的待办
  12. CI 框架 隐藏index.php 入口文件 和 设置访问application下子目录
  13. LOJ2557. 「CTSC2018」组合数问题
  14. mongodb 数据库中 的聚合操作
  15. Web开发中button与submit区别
  16. CSS字体超出两行省略
  17. vi 新建文件后保存文件时遇到的问题:E212: 无法打开并写入文件
  18. Mina的ssl加密
  19. 第1章 Linux命令行简介
  20. 使用jsonp形式跨域访问实现电商平台的左侧导航栏

热门文章

  1. think PHP5.1使用时 session重定向丢失问题
  2. POJ1840 Eqs
  3. thinkphp之无限分类
  4. php post请求https
  5. Cocos Creator与VS Code整合代码提示问题
  6. pandas_01
  7. martini-md参数(mdp文件)
  8. java服务器部署开源项目(若依)
  9. mysql之优化器、执行计划、简单优化
  10. java8-lambda-list中字符出现字数的统计