#include <bits/stdc++.h>
using namespace std;
class UF {
 private:
  vector<int> root;

 public:
  UF(int n) { root = vector<int>(n + 1, -1); }
  int getroot(int x) {
    if (root[x] == -1) return x;
    return root[x] = getroot(root[x]);
  }
  void add(int x, int y) {
    x = getroot(x);
    y = getroot(y);
    if (x == y) return;
    if (x > y) swap(x, y);
    root[y] = x;
    return;
  }
};
int main() {
  int v, e, r;
  cin >> v >> e >> r;
  priority_queue<pair<int, pair<int, int> > > qu;
  for (int i = 0; i < e; i++) {
    int s, t, w;
    cin >> s >> t >> w;
    if (t != r) qu.push(make_pair(-w, make_pair(s, t)));
  }
  int ans = 0;
  UF uf(v);
  while (!qu.empty()) {
    int w = -(qu.top()).first;
    int s = ((qu.top()).second).first;
    int t = ((qu.top()).second).second;
    qu.pop();
    s = uf.getroot(s);
    t = uf.getroot(t);
    if (s == t) continue;
    ans += w;
    uf.add(s, t);
  }
  cout << ans << endl;
}
