#include <bits/stdc++.h>
using namespace std;
const long long N = 2e5 + 5;
vector<long long> g0[N], g1[N], sz0(N), sz1(N), temp;
bool vis[N];
void dfs0(long long v, long long p) {
  vis[v] = 1;
  temp.push_back(v);
  for (auto &it : g0[v]) {
    if (p != it) dfs0(it, v);
  }
  return;
}
void dfs1(long long v, long long p) {
  vis[v] = 1;
  temp.push_back(v);
  for (auto &it : g1[v]) {
    if (p != it) dfs1(it, v);
  }
  return;
}
int main() {
  int n;
  cin >> n;
  long long ans = 0;
  for (int i = 0; i < n - 1; i++) {
    long long u, v, w;
    cin >> u >> v >> w;
    if (!w)
      g0[u].push_back(v), g0[v].push_back(u);
    else
      g1[u].push_back(v), g1[v].push_back(u);
  }
  memset(vis, 0, sizeof(vis));
  for (int i = 1; i <= n; i++) {
    if (!vis[i]) {
      temp.clear();
      dfs0(i, 0);
      long long l = temp.size();
      for (auto it : temp) sz0[it] = l;
      ans += (l * (l - 1));
    }
  }
  memset(vis, 0, sizeof(vis));
  for (int i = 1; i <= n; i++) {
    if (!vis[i]) {
      temp.clear();
      dfs1(i, 0);
      long long l = temp.size();
      for (auto it : temp) sz1[it] = l;
      ans += (l * (l - 1));
    }
  }
  for (int i = 1; i <= n; i++) ans += (sz0[i] - 1) * (sz1[i] - 1);
  cout << ans;
}
