#include<iostream> #include<cstdio> using namespace std; struct edge{ int to,next,v; }e[2100001]; long long ans; int n,cnt,size[1100001],head[1100001],fa[1100001]; inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } inline int iabs(int x){return x<0?-x:x;} void ins(int u,int v,int w){ e[++cnt].to=v;e[cnt].next=head[u];e[cnt].v=w;head[u]=cnt; } void dfs(int x) { size[x]++; for(int i=head[x];i;i=e[i].next) if(e[i].to!=fa[x]) { fa[e[i].to]=x; dfs(e[i].to); size[x]+=size[e[i].to]; ans+=(long long)e[i].v*iabs(n-2*size[e[i].to]); } } int main(){ n=read(); for(int i=1;i<=n-1;i++){ int u=read(),v=read(),w=read(); ins(u,v,w);ins(v,u,w); } dfs(1); printf("%lld",ans); return 0; }