正文
第一题:修复公路
这道题很明显啊,把边排一次序,用并查集来维护所在即可,(最小瓶颈生成树?=最小生成树)。。
所以记录一下最大值即可
#include<cstdio>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int n,m;
struct edge{
int x,y,c,next;
bool operator<(const edge y)const{
return c>y.c;
}
}s[200010];
priority_queue<edge> f;
bool tf[1010];
int first[1010],len=0;
int tot=0,ans=0;
void ins(int x,int y,int c){
len++;
s[len].y=y;s[len].c=c;s[len].next=first[x];first[x]=len;
}
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++){
int x,y,c;
scanf("%d %d %d",&x,&y,&c);
ins(x,y,c);
ins(y,x,c);
}
tf[1]=true;
for(int i=first[1];i!=0;i=s[i].next)
f.push(s[i]);
while(!f.empty()){
edge x=f.top();
f.pop();
if(tf[x.y]==false){
tf[x.y]=true;
for(int i=first[x.y];i!=0;i=s[i].next)
if(tf[s[i].y]==false) f.push(s[i]);
tot++;
ans=max(ans,x.c);
}
}
if(tot==n-1) printf("%d\n",ans);
else printf("-1");
}