题目说的挺玄乎,还对树分了层,其实就是一个裸的最小生成树

求出最小生成树后,所用的最大的那条边的长度就是答案
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm>
#include<cmath> using namespace std; typedef long long ll; const int N=1e5+10;
struct Edge { int u,v,c; bool operator < (const Edge &a) const { return c<a.c;
} }edge[N]; int uf[N]; int find(int x) { if(uf[x]==-1) return x; return
uf[x]=find(uf[x]); } int main() { int n,m,r; scanf("%d%d%d",&n,&m,&r);
memset(uf,-1,sizeof(uf)); for(int i=0;i<m;i++)
scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].c); sort(edge,edge+m); int
cnt=0,ans=0; for(int i=0;i<m;i++) { int u=edge[i].u; int v=edge[i].v; int
t=edge[i].c; int t1=find(u),t2=find(v); if(t1!=t2) { uf[t1]=t2; ans=max(ans,t);
cnt++; if(cnt==n-1) break; } } printf("%d\n",ans); return 0; }
 

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信