floyd
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define not !
#define and &&
#define or ||
#define r() fast_read()
#define rep(inc, frm, to) for (size_t inc = frm; inc < (to); ++inc)
#define MAX_N 110
#define oo 0x3f3f3f3f
typedef long long int ll;
ll fast_read(void) {
ll n = 0, sign = 1;
char c = getchar();
while (c < 48 or c > 57) {
if (c == '-') sign = ~0;
c = getchar();
}
while (c >= 48 and c <= 57) {
n = (n << 1) + (n << 3) + (c ^ 48);
c = getchar();
}
return sign * n;
}
int n, dp[MAX_N][MAX_N], a[MAX_N], ans = oo;
void init_dp(void) {
rep(i, 1, n + 1) rep(j, 1, n + 1) dp[i][j] = i == j ? 0 : oo;
}
void print_dp(void) {
rep(i, 1, n + 1) rep(j, 1, n + 1) printf("%10d%c", *(*(dp + i) + j), j == n ? 10 : 32);
putchar(10);
}
void floyd(void) {
rep(k, 1, n + 1) rep(i, 1, n + 1) rep(j, 1, n + 1) dp[i][j] = fmin(dp[i][j], dp[i][k] + dp[k][j]);
}
int main(int argc, char const *argv[]) {
n = r();
init_dp();
int x, y;
rep(i, 1, n + 1) {
*(a + i) = r();
x = r(), y = r();
if (x) dp[i][x] = dp[x][i] = 1;
if (y) dp[i][y] = dp[y][i] = 1;
}
floyd();
rep(i, 1, n + 1) {
int tot = 0;
rep(j, 1, n + 1) tot += dp[j][i] * a[j];
ans = fmin(ans, tot);
}
printf("%d", ans);
return 0;
}