水题,跑一边记录最短的就行了,
wa一次, 忽略两个都不能建的情况。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <map>
#include <math.h>
#define LL long long
using namespace std;
const int maxn=1e5+10;
const int mod=1e9+7;
int n,m,k,x,y,len,cnt=0;
struct node{
int w,to,val;
}edge[maxn*2];
int v[maxn],a[maxn];
int main(){
scanf("%d %d %d",&k,&n,&m);
for(int i=0;i<n;++i){
scanf("%d %d %d",&edge[i].w,&edge[i].to,&edge[i].val);
}
int mina=1e9+1;
for(int i=0;i<m;++i){
scanf("%d",&a[i]); v[a[i]]=1;
}
for(int i=0;i<n;++i)
if(v[edge[i].w]^v[edge[i].to]&&edge[i].val<mina)
mina=edge[i].val;
if(mina==1e9+1) mina=-1;
printf("%d\n",mina);
return 0;
}