正文
第一题:修复公路
这道题很明显啊,把边排一次序,用并查集来维护所在即可,(最小瓶颈生成树?=最小生成树)。。
所以记录一下最大值即可
#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"); }