#include<bits/stdc++.h>
using namespace std;
int g[1005][1005];
int main(){
int n,m,x;
scanf("%d%d%d",&n,&m,&x);
memset(g,0x3f,sizeof g);
for(int i=0;i<m;i++){
int l,r,len;
scanf("%d%d%d",&l,&r,&len);
g[l][r]=min(g[l][r],len); //重边
}
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
}
}
}
int ans=-1;
g[x][x]=0; //自己到自己家必须为0,不然会输出0x3f的值
for(int i=1;i<=n;i++){
ans=max(ans,g[i][x]+g[x][i]); //来回
}
cout<<ans<<endl;
return 0;
}
全部回复 共 0 条
还没有人回复。往下写第一条。
发表回复
登录后即可回复本帖,与出题人和同学一起讨论。
登录