#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn=200000*2+12;
ll n;
struct E{
ll f,t,n,v1,v2;
}edge[maxn];
ll l,head[maxn];
ll dep[maxn],f[maxn][30];
void dfs(ll num,ll fa){
dep[num]=dep[fa]+1;
for(ll i=1;(1<<i)<=n;i++){
f[num][i]=f[f[num][i-1]][i-1];
}
for(ll i=head[num];i;i=edge[i].n){
ll t=edge[i].t;
if(t==fa) continue;
f[t][0]=num;
dfs(t,num);
}
}
ll get_lca(ll id_1,ll id_2){
if(dep[id_2]<dep[id_1]) swap(id_1,id_2);
ll l=dep[id_2]-dep[id_1],k=0;
while(l){
if(l&1) id_2=f[id_2][k];
k++,l=l>>1;
}
if(id_2==id_1) return id_1;
for(ll i=35;i>=0;i--){
if(f[id_1][i]!=f[id_2][i]){
id_1=f[id_1][i];
id_2=f[id_2][i];
}
}
return f[id_1][0];
}
ll js[maxn],ans=0;
void dfs_2(ll num){
for(ll i=head[num];i;i=edge[i].n){
ll t=edge[i].t;
if(t==f[num][0]) continue;
dfs_2(t);
js[num]+=js[t];
if(edge[i].v1*js[t]>=edge[i].v2) ans+=edge[i].v2;
else ans+=edge[i].v1*js[t];
}
}
inline void read(){
scanf("%lld",&n);
for(ll i=1;i<n;i++){
ll f,t,v1,v2;
scanf("%lld%lld%lld%lld",&f,&t,&v1,&v2);
l++,edge[l]=(E){f,t,head[f],v1,v2},head[f]=l;
l++,edge[l]=(E){t,f,head[t],v1,v2},head[t]=l;
}
dep[1]=1;
dfs(1,0);
for(ll i=1;i<n;i++){
ll a=get_lca(i,i+1);
js[i]++,js[i+1]++;
js[a]-=2;
}
dfs_2(1);
printf("%lld",ans);
}
int main (){
read();
}