#define ONE_ANSWER 1 int n, d[500][500]; int nf, f[100]; int fd[500]; main() { int i, j, k, x, y, z, min, nmin; scanf( " %d %d", &nf, &n ); for( i = 0; i < nf; i++ ) { scanf( " %d", &f[i] ); f[i]--; } for( i = 0; i < n; i++ ) for( j = 0; j < n; j++ ) d[i][j] = 1000000000; for( i = 0; i < n; i++ ) d[i][i] = 0; while( scanf( " %d %d %d", &x, &y, &z ) == 3 ) { x--; y--; d[x][y] = d[y][x] = z; } for( i = 0; i < n; i++ ) for( j = 0; j < n; j++ ) for( k = 0; k < n; k++ ) { x = d[j][i] + d[i][k]; if( d[j][k] > x ) d[j][k] = x; } for( i = 0; i < n; i++ ) { fd[i] = 1000000000; for( j = 0; j < nf; j++ ) if( d[i][f[j]] < fd[i] ) fd[i] = d[i][f[j]]; } nmin = -1; min = 1000000000; for( i = 0; i < n; i++ ) { x = -1; for( j = 0; j < n; j++ ) { y = (d[j][i] x ) x = y; } if( x < min ) { nmin = i; min = x; } } #if !ONE_ANSWER printf( "Possible answers:" ); for( i = 0; i < n; i++ ) { x = -1; for( j = 0; j < n; j++ ) { y = (d[j][i] x ) x = y; } if( x == min ) printf( " %d", i+1 ); } putchar( '\n' ); #else printf( "%d\n", nmin+1 ); #endif }