问题描述:
我用hash写的。这个题直接贪心就可以吧。我应该做的麻烦了一些。
直接从储存面粉的地方开始找最短路。
ac代码:
#include<bits/stdc++.h>
using namespace std;
#define N 0x3f3f3f3f
struct Node
{
int u,v,l,nextt;
}cnt[400005];
int head[400005];
bool vis[100005];
int n,m,k,i,j,u,v,l,top=0;
void add(int a,int b,int c)
{
cnt[top].u=a;
cnt[top].v=b;
cnt[top].l=c;
cnt[top].nextt=head[a];
head[a]=top++;
}
int main()
{
ios::sync_with_stdio(false);
memset(vis,0,sizeof(vis));
memset(head,-1,sizeof(head));
cin>>n>>m>>k;
for(i=0;i<m;i++)
{
cin>>u>>v>>l;
add(u,v,l);
add(v,u,l);
}
for(i=0;i<k;i++)
{
cin>>j;
vis[j]=1;
}
int minn=N;
for(i=1;i<=n;i++)
{
j=head[i];
if(!vis[cnt[j].u])
continue;
for(j=head[i];j!=-1;j=cnt[j].nextt)
{
if(vis[cnt[j].v])
continue;
//cout<<"U: "<<cnt[j].u<<" V: "<<cnt[j].v<<" L: "<<cnt[j].l<<endl;
minn=min(minn,cnt[j].l);
}
}
if(minn==N)
cout<<-1<<endl;
else
cout<<minn<<endl;
}