#include<cstdio>        //固定起点,求出到其它顶点的最长路径,邻接表+优先队列实现Dijkstra算法
#include<cstring>

#include<queue>
#include <algorithm>
using namespace std;

const int INF = -1<<30;
const int MAXN = 10000;
const int MAXM = 20000;

int n, m; //结点数和边数,结点下标从0开始
int first[MAXN], distD[MAXN],done[MAXN];

int u[MAXM], v[MAXM], w[MAXM], Next[MAXM]; //first[u]保存结点u的第一条边的编号,next[e]表示编号为e的边的“下一条边”的编号

typedef pair<int,int> pii;
void init()
{
fill(first,first+n,-1);
m=0;
for(int k=0;k<n-1;++k) //根据题意的“连通性”和“恰好包含n-1条边”,必不含圈
{

scanf("%d%d%d", &u[m], &v[m], &w[m]);
u[m]--;v[m]--;
Next[m] = first[u[m]];
first[u[m]] = m;
m++;
u[m]=v[m-1]; //无向边
v[m]=u[m-1];

w[m]=w[m-1];
Next[m] = first[u[m]];
first[u[m]] = m;
m++;
}
}
void Dijkstra(int st)
{
priority_queue<pii, vector<pii>, less<pii> > q; //最长路径,所以是 less<pii>
fill(distD,distD+n,INF); //注意这里的INF应该是负无穷
distD[st]=0;

fill(done,done+n,0);
q.push(make_pair(distD[st], st));
int cnt=0;
while(!q.empty())
{
pii u = q.top();
q.pop();
int x = u.second;
if(done[x])
continue;
done[x] = 1;
if(++cnt==n) //n个结点
{

break;
}
for(int e = first[x]; e != -1; e = Next[e])
if(!done[v[e]]&&distD[v[e]] < distD[x]+w[e])
{
distD[v[e]] = distD[x] + w[e];
q.push(make_pair(distD[v[e]], v[e]));
}
}
}
int main()
{
int k;
while(scanf("%d%d",&n,&k)==2)
{
init();
Dijkstra(k-1);
printf("%d\n",*max_element(distD,distD+n));
}
return 0;
}