Code:
#include <bits/stdc++.h>
using namespace std;
void read(long long&x){
long long s=0,w=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-'){
w=-1;
}
c=getchar();
}
while(c>='0'&&c<='9'){
s=s*10+c-'0';
c=getchar();
}
x=s*w;
return;
}
long long n,m,x;
long long u,v,w;
long long dist[1010][1010];
long long head[100010];
long long tot;
long long ans;
void floyd(){
for(long long k=1;k<=n;k++){
for(long long i=1;i<=n;i++){
for(long long j=1;j<=n;j++){
dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j]);
}
}
}
return ;
}
long long main(){
memset(dist,0x3f3f3f3f,sizeof(dist));
read(n);
read(m);
read(x);
for(long long i=1;i<=m;i++){
read(u);
read(v);
read(w);
dist[u][v]=min(dist[u][v],w);
}
floyd();
for(long long i=1;i<=n;i++){
ans=max(ans,dist[i][x]+dist[x][i]);
}
printf("%lld",ans);
return 0;
}
80分,必关