tj
2026-05-23 10:11:55
发布于:广东
5阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
struct edge
{
int u,v,w;
}e[1000000];
int a[1000000];
int get(int idx)
{
if(idx == a[idx])
return idx;
return a[idx] = get(a[idx]);
}
void Union(int x,int y)
{
a[get(x)] = get(y);
}
bool cmp(edge e1,edge e2)
{
return e1.w < e2.w;
}
int main()
{
int n,m;cin >> n >> m;
for(int i = 1;i <= m;i++)
cin >> e[i].u >> e[i].v >> e[i].w;
for(int i = 1;i <= m;i++)
a[i] = i;
sort(e+1,e+m+1,cmp);
int sum = 0,ans = 0;//权值之和 边得数量
for(int i = 1;i <= m;i++)
{
if(get(e[i].u) == get(e[i].v))
continue;
sum += e[i].w;
ans++;
Union(e[i].u,e[i].v);
}
if(ans == n - 1)
cout << sum << endl;
else
cout << "orz" << endl;
return 0;
}
全部评论 2
d d d
2026-05-23 来自 浙江
0bbb
2026-05-23 来自 广东
0








有帮助,赞一个