【洛谷 p3366】模板-最小生成树(图论)


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

解法:Kruskal求MST。

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<algorithm>
 6 using namespace std;
 7 
 8 const int N=5010,M=200010;
 9 int fa[N];
10 struct edge{int x,y,d;}a[M];
11 
12 int ffind(int x)
13 {
14     if (fa[x]!=x) fa[x]=ffind(fa[x]);
15     return fa[x];
16 }
17 bool cmp(edge x,edge y) {return x.d<y.d;}
18 int main()
19 {
20     int n,m;
21     scanf("%d%d",&n,&m);
22     int x,y,d;
23     for (int i=1;i<=m;i++)
24       scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].d);
25     sort(a+1,a+1+m,cmp);
26     for (int i=1;i<=n;i++) fa[i]=i;
27     int sum=0,cnt=0;
28     for (int i=1;i<=m;i++)
29     {
30       int x=a[i].x,y=a[i].y;
31       int xx=ffind(x),yy=ffind(y);
32       if (xx!=yy)
33       {
34         fa[xx]=yy;
35         sum+=a[i].d;
36         cnt++;
37         if (cnt==n-1) break;
38       }
39     }
40     if (cnt==n-1) printf("%d\n",sum);
41     else printf("orz\n");
42     return 0;
43 }

优质内容筛选与推荐>>
1、C博客第03次作业---函数
2、centos内网服务器搭建
3、cron相关
4、面向对象小结
5、python模块之pyMySql


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号