题目
注意事项
啊啊啊啊啊 注意无向边要建两条边!!!建两条边的话Edge的条数要*2!!!贡献WA和RE OMG
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=100005;
const int INF=0x3f3f3f3f;
int n,m,k;
struct Edge{
int next,to,w;
}edge[MAXN<<1];
int head[MAXN];
int supply[MAXN];
bool sup[MAXN];
int cnt;
void add_edge(int u,int v,int w){
edge[++cnt].to=v;
edge[cnt].w=w;
edge[cnt].next=head[u];
head[u]=cnt;
edge[++cnt].to=u;
edge[cnt].w=w;
edge[cnt].next=head[v];
head[v]=cnt;
}
int main(){
scanf("%d%d%d",&n,&m,&k);
int u,v,w;
for(int i=1;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
add_edge(u,v,w);
}
if(k==0){
printf("-1
");
return 0;
}
for(int i=1;i<=k;i++){
scanf("%d",&supply[i]);
sup[supply[i]]=true;
}
int ans=INF;
for(int i=1;i<=k;i++){
int to;
for(int j=head[supply[i]];j;j=edge[j].next){
to=edge[j].to;
if(sup[to]) continue;
ans=ans>edge[j].w?edge[j].w:ans;
}
}
if(ans==INF) printf("-1
");
else printf("%d
",ans);
return 0;
}