例题一:繁忙都市 link
思路:
Kruskal模板题.
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
struct node
{
int u, v, w;
} p[N];
int n, m, tot, k, f[N];
bool cmp(node a, node b) {
return a.w < b.w;}
int find(int x) {
return x == f[x] ? x : f[x] = find(f[x]);}
int main()
{
//fre();
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++) f[i] = i;
for(int i = 1; i <= m; i++) scanf("%d%d%d", &p[i].u, &p[i].v, &p[i].w);
sort(p + 1, p + 1 + m, cmp);
for(int i = 1; i <= m; i++)
{
int fx = find(p[i].u), fy = find(p[i].v);
if(fx != fy)
{
f[fx] = fy;
k++;
tot = max(tot, p[i].w);
if(k == n - 1)
{
printf("%d %d\n", k, tot);
return 0;
}
}
}
return 0;