Bakery - CF707B 【贪心 水题 图论】

题目

CF707B

注意事项

啊啊啊啊啊 注意无向边要建两条边!!!建两条边的话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\n");
		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\n");
	else printf("%d\n",ans);
	return 0;
}
posted @ 2020-05-05 17:31  xxxuanei  阅读(103)  评论(0编辑  收藏  举报