#include <bits/stdc++.h>
#include <utility>
using namespace std;
class Kaupunki
{
public:
bool pelto;
int satamaan;
vector<pair<Kaupunki, int>> naapurit;
Kaupunki()
{
pelto = false;
satamaan = 0x7FFFFFFF;
}
void lisaaNaapuri(Kaupunki itse, 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(kaupunki, itse, 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(string teksti, int pituus)
{
vector<string> jaettu(pituus);
string osa;
int pituus = teksti.length();
for (int i = 0; i < pituus; i++)
{
char nykyinen = teksti[i];
if (nykyinen == ' ')
{
jaettu.push_back(osa);
osa = "";
}
else
{
osa += nykyinen;
}
}
jaettu.push_back(osa);
return jaettu;
}
int main()
{
int n;
std::cin >> n;
string pellotRaw;
cin >> pellotRaw;
Kaupunki kaupungit[n];
string onko;
cin >> onko;
vector<string> satamat = split(onko, n);
for (int i = 0; i < n; i++)
{
kaupungit[i] = Kaupunki();
kaupungit[i].pelto = satamat.at(i)[0] == '1';
}
for (int i = 0; i < n - 1; i++)
{
string matkat;
cin >> matkat;
vector<string> syote = split(matkat, 3);
int kaupunki1Id = stoi(syote.at(0)) - 1;
int kaupunki2Id = stoi(syote[1]) - 1;
kaupungit[kaupunki1Id].lisaaNaapuri(kaupungit[kaupunki1Id], kaupungit[kaupunki2Id], stoi(syote[2]), true);
}
int yhteensa = 0;
for (int i = 0; i < n; i++)
{
yhteensa += kaupungit[i].satamaan;
}
cout << yhteensa;
}