func_code_string: #include <bits/stdc++.h>   using namespace std;   int n;   vector<vector<pair<int, int>>> g;   vector<int> p;   vector<bool> was;   vector<int> sz;   long long res;   void calcSz(int v, int par = -1) {     sz[v] = 1;     for (int i = 0; i < (int)g[v].size(); ++i) {       int to = g[v][i].first;       if (to != par && !was[to]) {         calcSz(to, v);         sz[v] += sz[to];       }     }   }   int findCentroid(int v, int n, int par = -1) {     for (int i = 0; i < (int)g[v].size(); ++i) {       int to = g[v][i].first;       if (to != par && !was[to] && 2 * sz[to] > n) {         return findCentroid(to, n, v);       }     }     return v;   }   int getInc(int v, int edge, int par = -1) {     int res = 1;     for (int i = 0; i < (int)g[v].size(); ++i) {       int to = g[v][i].first;       if (to != par && !was[to] && g[v][i].second >= edge) {         res += getInc(to, g[v][i].second, v);       }     }     return res;   }   int getDec(int v, int edge, int par = -1) {     int res = 1;     for (int i = 0; i < (int)g[v].size(); ++i) {       int to = g[v][i].first;       if (to != par && !was[to] && g[v][i].second <= edge) {         res += getDec(to, g[v][i].second, v);       }     }     return res;   }   int build(int v) {     calcSz(v);     v = findCentroid(v, sz[v]);     was[v] = true;     int inc0 = 0;     int inc1 = 0;     int dec0 = 0;     int dec1 = 0;     for (int i = 0; i < (int)g[v].size(); ++i) {       int to = g[v][i].first;       if (!was[to]) {         int inc = getInc(to, g[v][i].second, v);         int dec = getDec(to, g[v][i].second, v);         if (g[v][i].second == 0) {           res += inc * 1ll * (dec0 + 1);           res += dec * 1ll * (inc0 + inc1 + 1);           inc0 += inc;           dec0 += dec;         } else {           res += inc * 1ll * (dec0 + dec1 + 1);           res += dec * 1ll * (inc1 + 1);           inc1 += inc;           dec1 += dec;         }       }     }     for (int i = 0; i < (int)g[v].size(); ++i) {       int to = g[v][i].first;       if (!was[to]) {         p[build(to)] = v;       }     }     return v;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     cin >> n;     g.resize(n);     p.resize(n);     was.resize(n);     sz.resize(n);     for (int i = 0; i < n - 1; ++i) {       int a, b, c;       cin >> a >> b >> c;       --a;       --b;       g[a].push_back({b, c});       g[b].push_back({a, c});     }     build(0);     cout << res << endl;     return 0;   }   