#include <iostream>
#include <vector>
#include <climits>
using namespace std;
#define fr second.first
#define to second.second
#define co first
const int INF=INT_MAX;
typedef pair<int,int> P;
typedef pair<int,P> Edge;
long long edmonds(vector<Edge> edges,int v,int st) {
 
  vector<P> mins(v,P(INF,-1));
  for(int i=0;i<(int)edges.size();i++) {
    Edge edge=edges[i];
    mins[edge.to]=min(mins[edge.to],P(edge.co,edge.fr));
  }
  mins[st]=P(-1,-1);
  
  vector<int> gr(v,0);
  vector<bool> tfc(v,false),f(v,false);
  int cnt=0; 

  for(int i=0;i<v;i++){
    if(f[i]) continue;
    vector<int> ch;
    int cu=i;
    for(;cu!=-1&&!f[cu];){ 
      f[cu]=true;
      ch.push_back(cu);
      cu=mins[cu].second;
    }
    if(cu!=-1){
      bool tfc2=false;
      for(int j=0;j<(int)ch.size();j++) {
	gr[ch[j]]=cnt;
	if(ch[j]==cu){
	  tfc[cnt]=true;
	  tfc2=true;
	}
	if(!tfc2) cnt++;
      }
      if(tfc2) cnt++;
    }
    else for(int j=0;j<(int)ch.size();j++,cnt++) gr[ch[j]]=cnt;
  }

  if(cnt==v){
    long long ans=1;
    for(int i=0;i<v;i++) ans+=mins[i].co;
    return ans;
  }

  long long res=0;
  for(int i=0;i<v;i++) if(i!=st&&tfc[gr[i]]) res+=mins[i].co;
    
  vector<Edge> nedges;
  for(int i=0;i<(int)edges.size();i++) {
    Edge edge=edges[i];
    int fto=edge.to,gfr=gr[edge.fr],gto=gr[edge.to];
    if(gfr==gto) continue;
    else if(tfc[gto]) nedges.push_back(make_pair(edge.co-mins[fto].co,P(gfr,gto)));
    else nedges.push_back(make_pair(edge.co,P(gfr,gto)));
  }

  return res+edmonds(nedges,cnt,gr[st]);

}

int main(){
  int v,e,r;
  cin>>v>>e>>r;
  vector<Edge> es;
  for(int i=0,s,t,w;i<e&&cin>>s>>t>>w;i++) es.push_back(make_pair(w,P(s,t)));
  cout<<edmonds(es,v,r)<<endl;
  return 0;
}