/*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 ",sum*2-M); } return 0; }