博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
*[hackerrank]Cut the tree
阅读量:4542 次
发布时间:2019-06-08

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

https://www.hackerrank.com/contests/w2/challenges/cut-the-tree

树分成两部分,求两部分差最小。一开始想多了,后来其实求一下总和,求一下分部的和就行了。

#include 
#include
#include
#include
#include
using namespace std;vector
> tree;vector
visited;vector
val;int totalVal;int subSum(int root, int& minCut) { int sum = 0; visited[root] = true; for (int i = 0; i < tree[root].size(); i++) { int sub = tree[root][i]; if (visited[sub]) continue; int x = subSum(sub, minCut); sum += x; } sum += val[root]; minCut = min(minCut, abs(totalVal - 2 * sum)); return sum;}int main() { int N; cin >> N; tree.resize(N + 1); visited.resize(N + 1); val.resize(N + 1); totalVal = 0; for (int i = 1; i <= N; i++) { cin >> val[i]; totalVal += val[i]; } for (int i = 0; i < N - 1; i++) { int a, b; cin >> a >> b; tree[a].push_back(b); tree[b].push_back(a); } int minCut = INT_MAX; // pick 1 as root subSum(1, minCut); cout << minCut << endl; return 0;}

  

转载于:https://www.cnblogs.com/lautsie/p/3915885.html

你可能感兴趣的文章
基础2
查看>>
java基础篇---网络编程(UDP程序设计)
查看>>
JQuery怎样返回前一页
查看>>
Best Time to Buy and Sell Stock
查看>>
Web服务器的原理
查看>>
记录ok6410 jlink 命令行调试uboot
查看>>
ASP.net 内置对象
查看>>
Docker快速配置指南
查看>>
Python基础---OS模块 (二)
查看>>
【JS点滴】substring和substr以及slice和splice的用法和区别。
查看>>
awk多模式匹配
查看>>
线段树
查看>>
a span等行内元素加margin属性后无效果解决方案
查看>>
傻瓜式硬盘重装win7系统图文加视频教程
查看>>
BZOJ 1607 [Usaco2008 Dec]Patting Heads 轻拍牛头:统计 + 筛法【调和级数】
查看>>
如果一个人请优雅的活着。
查看>>
验证码
查看>>
Django缓存配置
查看>>
Ubuntu下安装 Mysql
查看>>
LeetCode--Reverse Integer
查看>>