样例输入:
3 3
1 2 3
1 3 5
2 3 8
样例输出:
8
思想
题目说要去掉一些管道,使得管道管理费用最小,并且城市之间不再形成回路。那么也就是会生成一颗树。而树越小管理费用越小,因此,本题就是让我们求一最小生成树。
因此直接套用最小生成树模板即可:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e2 + 10;
struct NODE
{
int i, j, c;
bool operator<(const NODE& t)const
{
return c < t.c;
}
}p[N];
int n, k, fa[N], ans;
void Init()
{
for (int i = 1; i < N; i++)
fa[i] = i;
}
int find(int x)
{
if (x != fa[x])fa[x] = find(fa[x]);
return fa[x];
}
void merge(int x, int y)
{
x = find(x), y = find(y);
if (x != y)
fa[x] = y;
}
int main()
{
Init();
cin >> n >> k;
for (int i = 1; i <= k; i++)
cin >> p[i].i >> p[i].j>>p[i].c;
sort(p + 1, p + k + 1);
for (int i = 1; i <= k; i++)
{
if (find(p[i].i) != find(p[i].j))
{
ans += p[i].c;
merge(p[i].i, p[i].j);
}
}
cout << ans<<endl;
return 0;
}