ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

洛谷 P3366 【模板】最小生成树 题解

2021-08-25 16:03:00  阅读:172  来源: 互联网

标签:node 输出 连通 洛谷 题解 ll long 该图 P3366


题目描述

如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出 orz

输入格式

第一行包含两个整数 N,M,表示该图共有 N 个结点和 M 条无向边。

接下来 M 行每行包含三个整数 Xi​,Yi​,Zi​,表示有一条长度为 Zi​ 的无向边连接结点 Xi​,Yi​。

输出格式

如果该图连通,则输出一个整数表示最小生成树的各边的长度之和。如果该图不连通则输出 orz

AC代码

 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 
 5 ll n,m,x,y,z,fa[200010],tmp,ans;
 6 struct node{
 7     ll x,y,z;
 8 }a[200010];
 9 
10 bool cmp(node a,node b)
11 {
12     return a.z<b.z;
13 }
14 
15 int find(int x)
16 {
17     return fa[x]==x?x:fa[x]=find(fa[x]);
18 }
19 
20 int main()
21 {
22     scanf("%lld%lld",&n,&m);
23     for (int i=1;i<=n;i++)
24         fa[i]=i;
25     for (int i=1;i<=m;i++)
26     {
27         scanf("%lld%lld%lld",&a[i].x,&a[i].y,&a[i].z);
28     }
29     sort(a+1,a+1+m,cmp);
30     for (int i=1;i<=m&&tmp<n-1;i++)
31     {
32         int t1=find(a[i].x),t2=find(a[i].y);
33         if (t1!=t2)
34         {
35             ans+=a[i].z;
36             tmp++;
37             fa[t1]=t2;
38         }
39     }
40     if (tmp<n-1)
41         cout<<"orz";
42     else
43         cout<<ans;
44     return 0;
45 }

 

标签:node,输出,连通,洛谷,题解,ll,long,该图,P3366
来源: https://www.cnblogs.com/zeng-xin/p/15185414.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有