/*poj 1849 two 思考一下会发现 就是求直径 直径上的中点就是两个人分开的地方(不再有交集)*/
#include<cstdio>
#define maxn 100010
using namespace std;
int n,num,head[maxn],root,f[maxn][2],sum,M;
struct node{
int v,t,pre;
}e[maxn*2];
int init(){
int x=0,f=1;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
return x*f;
}
int max(int x,int y){
return x>y?x:y;
}
void Add(int from,int to,int dis){
num++;e[num].v=to;
e[num].t=dis;
e[num].pre=head[from];
head[from]=num;
}
void Cl(){
num=M=sum=0;
for(int i=1;i<=n;i++)
head[i]=f[i][0]=f[i][1]=0;
}
void Dfs(int now,int from){
for(int i=head[now];i;i=e[i].pre){
int v=e[i].v;if(v==from)continue;
Dfs(v,now);
}
int mx=0,mxx=0;
for(int i=head[now];i;i=e[i].pre){
int v=e[i].v;if(v==from)continue;
int Mx=f[v][0]+e[i].t;
if(Mx>mx)mxx=mx,mx=Mx;
else if(Mx>mxx)mxx=Mx;
}
f[now][0]=mx;f[now][1]=mxx;
}
int main()
{
while(~scanf("%d%d",&n,&root)){
Cl();
int u,v,t;
for(int i=1;i<n;i++){
u=init();v=init();t=init();
Add(u,v,t);Add(v,u,t);sum+=t;
}
Dfs(root,0);
for(int i=1;i<=n;i++)
M=max(M,f[i][0]+f[i][1]);
printf("%d\n",sum*2-M);
}
return 0;
}