#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=100000+5;
const int INF=1111111111;
struct Point{
int d,u;
Point(int u=-1,int d=INF):d(d),u(u){}
};
vector<vector<Point> > G(maxn);
vector<int> points;
bool tree[maxn];
int solve()
{
int ans=INF;
for(int i=0;i<points.size();i++)
{
int u=points[i];
for(int j=0;j<G[u].size();j++)
{
int v=G[u][j].u;
if(v!=-1&&!tree[v]) ans=min(ans,G[u][j].d);
}
}
if(ans==INF) return -1;
else return ans;
}
int main()
{
int n,m,k;
cin>>n>>m>>k;
while(m--)
{
int u,v,w;
cin>>u>>v>>w;
G[u].push_back(Point(v,w));
G[v].push_back(Point(u,w));
}
while(k--)
{
int u;
cin>>u;
points.push_back(u);
tree[u]=true;
}
cout<<solve();
return 0;
}
#368 (Div. 2) B. Bakery
最新推荐文章于 2017-11-03 19:00:14 发布