CF707B
题目简化和分析:
这题看着玄胡很水实际。
我们需要做什么?
- 只需对每个工厂周围的面包店遍历一遍打擂台取最小
- 注意只对面包店遍历,所以对工厂设标记
- 如果打完擂台发现 \(ans=inf\) 则说明全是工厂
Solution:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+50;
int n,m,k;
struct edge{
int to,dis,next;
}e[N<<1];
int head[N<<1],a[N],cnt;
void add_edge(int u,int v,int w){
++cnt;
e[cnt].to=v;
e[cnt].dis=w;
e[cnt].next=head[u];
head[u]=cnt;
}
bool vis[N];
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=m;++i){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
add_edge(u,v,w);
add_edge(v,u,w);
}
for(int i=1;i<=k;++i){
scanf("%d",&a[i]);
vis[a[i]]=1;
}
int ans=INT_MAX;
for(int i=1;i<=k;++i){
for(int j=head[a[i]];j;j=e[j].next){
int y=e[j].to;
if(vis[y]) continue;
ans=min(ans,e[j].dis);
}
}
printf("%d\n",ans==INT_MAX?-1:ans);
}

浙公网安备 33010602011771号