#include <bits/stdc++.h>
using
namespace
std;
void
MinimumDifference(
int
total_weight[],
int
N)
{
int
min_difference = INT_MAX;
for
(
int
i = 1; i < N; i++) {
if
(total_weight[i]
- total_weight[i - 1]
< min_difference) {
min_difference
= total_weight[i]
- total_weight[i - 1];
}
}
cout << min_difference << endl;
}
void
SumTree(vector<pair<
int
,
int
> > v,
int
individual_weight[],
int
N)
{
int
total_weight[N] = { 0 };
int
visited[N] = { 0 };
int
first, second;
for
(
int
i = (N - 2); i >= 0; i--) {
first = v[i].first;
second = v[i].second;
if
(visited[second - 1] == 0) {
total_weight[second - 1]
+= individual_weight[second - 1];
visited[second - 1] = 1;
}
total_weight[first - 1]
+= total_weight[second - 1];
if
(visited[first - 1] == 0) {
total_weight[first - 1]
+= individual_weight[first - 1];
visited[first - 1] = 1;
}
}
sort(total_weight, total_weight + N);
MinimumDifference(total_weight, N);
}
int
main()
{
int
N = 8;
vector<pair<
int
,
int
> > v;
v.push_back(make_pair(1, 4));
v.push_back(make_pair(1, 6));
v.push_back(make_pair(6, 2));
v.push_back(make_pair(6, 3));
v.push_back(make_pair(2, 5));
v.push_back(make_pair(2, 7));
v.push_back(make_pair(2, 8));
int
individual_weight[N] = { 3, 5, 8, 10,
2, 6, 7, 11 };
SumTree(v, individual_weight, N);
return
0;
}