LINK:http://codeforces.com/contest/707/problem/B
题意:
n个城市,m条边,k个城市里有进货点。Masha要选一个没有进货点的城市开店,要选一个最近的有商店的城市进货,输出她进货时所用的最小路程。
解法:
必须是进货点和商店相邻最优然后对每个进货点扫一次就行。
#include<bits/stdc++.h>
using namespace std;
const int maxn=100100;
__int64 ans=0;
bool vis[maxn]={0},black[maxn]={0};
int bb[maxn];
struct{
int to,next,w;
}edge[maxn<<1];
int head[maxn],tol=0;
void addedge(int u,int v,int w)
{
edge[tol].to=v;
edge[tol].next=head[u];
edge[tol].w=w;
head[u]=tol++;
}
int main()
{
memset(head,-1,sizeof head);
int a,b,w;
int n,m,k;
cin>>n>>m>>k;
for(int i=0;i<m;i++)
{
cin>>a>>b>>w;
addedge(a,b,w);
addedge(b,a,w);
}
for(int i=0;i<k;i++)
{
cin>>bb[i];
black[bb[i]]=1;
}
ans=9999999999;
for(int i=0;i<k;i++)
{
int u=bb[i];
for(int j=head[u];j!=-1;j=edge[j].next)
{
int v=edge[j].to,w=edge[j].w;
if(!black[v])
{
if(w<ans)ans=w;
}
}
}
if(ans!=9999999999)cout<<ans<<endl;
else cout<<"-1"<<endl;
return 0;
}