题意:
找到最小生成树里的最大边。
思路:
只需要将裸板子中,最小生成树一直累加边权的语句sum += edge[i].w; 更改为:
if(edge[i].w> max) max = edge[i].w; 最后输出max即可。
本人AC代码:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long LL;
const int MaxN = 1e5 + 5;
int Fa[MaxN];
int n, m;
int find(int u) {
if(Fa[u]== u) return u;
elsereturn Fa[u] = find(Fa[u]);
}
struct EDGE {
intu, v, w;
}edge[MaxN];
bool Cmp(EDGE A, EDGE B) {return A.w< B.w;}
int main() {
intmax = 0;
scanf("%d%d", &n, &m);
for(inti = 1; i <= n; i++) Fa[i] = i;
for(inti = 1; i <= m; i++) {
scanf("%d%d %d", &edge[i].u, &edge[i].v, &edge[i].w);
}
sort(edge+ 1, edge + m + 1, Cmp);
intsum = 0;
for(inti = 1; i <= m; i++) {
intu = edge[i].u;
intv = edge[i].v;
if(find(u)!= find(v)) {
Fa[find(u)]= find(v);
if(edge[i].w> max) max = edge[i].w;
}
}
printf("%d\n",max);
return0;
}