#include <bits/stdc++.h>
using namespace std;
//
const int maxN = 2e5 + 5;
//
int N, A, B;
int h[maxN], up[20][maxN];
int vertex[maxN], edge[maxN];
long long ans, C1[maxN], C2[maxN];
vector<pair<int, int>> adj[maxN];
//
void DFS_1 (int u = 1)
{
    for (auto [id, v] : adj[u])
    {
        if (v == up[0][u])
            continue;
        h[v] = h[u] + 1;
        up[0][v] = u;
        for (int i = 1; i < 20; ++i)
            up[i][v] = up[i - 1][up[i - 1][v]];
        DFS_1(v);
    }
}
int LCA (int u, int v)
{
    if (h[u] != h[v])
    {
        if (h[u] < h[v])
            swap(u, v);
        for (int k = h[u] - h[v], i = 0; (1 << i) <= k; ++i)
            if (k >> i & 1)
                u = up[i][u];
    }
    if (u == v)
        return u;
    for (int i = __lg(h[v]); i >= 0; --i)
        if (up[i][u] != up[i][v])
            u = up[i][u],
            v = up[i][v];
    return up[0][v];
}
void DFS_2 (int u = 1)
{
    int index = 0;
    //
    for (auto [id, v] : adj[u])
        if (v == up[0][u])
            index = id;
        else
            DFS_2(v),
            vertex[u] += vertex[v];
    edge[index] = vertex[u];
}
//
void process (void)
{
    cin >> N;
    for (int i = 1; i < N; ++i)
    {
        cin >> A >> B >> C1[i] >> C2[i];
        adj[A].emplace_back(i, B);
        adj[B].emplace_back(i, A);
    }

    DFS_1();
    for (int i = 1; i < N; ++i)
    {
        ++vertex[i];
        ++vertex[i + 1];
        vertex[LCA(i, i + 1)] -= 2;
    }
    DFS_2();
    for (int i = 1; i < N; ++i)
        ans += min(C1[i] * edge[i], C2[i]);

    cout << ans;
}
//
signed main (void)
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr), cout.tie(nullptr);
    process();
}
