#include <bits/stdc++.h>
#include <utility>
using namespace std;
class Kaupunki
{
public:
bool pelto;
int satamaan;
vector<pair<Kaupunki, int>> naapurit;
Kaupunki(){
};
Kaupunki(bool onkoPelto)
{
pelto = onkoPelto;
};
void lisaaNaapuri(Kaupunki kaupunki, int etaisyys, bool takaisin)
{
if (pelto)
{
int matkaSatamaan = kaupunki.satamaan != 0x7FFFFFFF ? kaupunki.satamaan + etaisyys : 0x7FFFFFFF;
if (matkaSatamaan < satamaan)
{
satamaan = matkaSatamaan;
for (pair<Kaupunki, int> polku : naapurit)
{
int pituus = matkaSatamaan + polku.second;
if (polku.first.satamaan > pituus)
polku.first.paivitaEtaisyysSatamaan(pituus);
}
}
}
pair<Kaupunki, int> polku = pair(kaupunki, etaisyys);
naapurit.push_back(polku);
if (takaisin) kaupunki.lisaaNaapuri(this, etaisyys, false);
}
void paivitaEtaisyysSatamaan(int etaisyys)
{
satamaan = etaisyys;
for (pair<Kaupunki, int> yhteys : naapurit)
{
int pituus = etaisyys + yhteys.second;
if (yhteys.first.satamaan > pituus)
yhteys.first.paivitaEtaisyysSatamaan(pituus);
}
}
};
vector<string> split(const string &s, char delim)
{
vector<string> result;
stringstream ss(s);
string item;
while (getline(ss, item, delim))
{
result.push_back(item);
}
return result;
}
int main()
{
int n;
std::cin >> n;
string pellotRaw;
cin >> pellotRaw;
Kaupunki kaupungit[n];
for (int i = 0; i < n - 1; i++)
{
string matkat;
cin >> matkat;
vector<string> syote = split(matkat, ' ');
int kaupunki1Id = stoi(syote.at(0)) - 1;
int kaupunki2Id = stoi(syote[1]) - 1;
kaupungit[kaupunki1Id].lisaaNaapuri(kaupungit[kaupunki2Id], stoi(syote[2]), true);
}
}