博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
题解 20181029测试:T4 ambassador
阅读量:5917 次
发布时间:2019-06-19

本文共 707 字,大约阅读时间需要 2 分钟。

本题的思路有很多,这里只介绍一种:

最大生成树(Kruskal)

算法思路:

就是Kruskal的常规思路:

先是排序,再是用并查集连边,最后输出最大边权

sort(e+1,e+1+m,cmp);for(int i=1;i<=m;++i){    f=find(e[i].f);    t=find(e[i].t);    if(f!=t)    {        b[f]=t;        ++cnt;        w=find(1);        if(t==w)        {            for(int j=2;j<=n;++j)            {                if(ok[j]==false&&find(j)==w)                {                    ans[j]=e[i].w;                    ok[j]=true;                }            }            if(cnt==n-1)            {                break;            }        }    }}

Q1:本题为什么要用最大生成树(Kruskal)?

A1:因为只需要判断每一个点在生成最大生成树的时候,是否与$1$联通,如果联通了,那么他的答案就是当前边(因为边是按权值从大到小排列的,当前边就是当前点与$1$中最小的边)。

转载于:https://www.cnblogs.com/Point-King/p/9870554.html

你可能感兴趣的文章
第 1 章 DB-Engines - DB-Engines Ranking
查看>>
【IntelliJ Idea】idea快速创建maven spring项目
查看>>
Nancy总结(三)Nancy资料介绍
查看>>
第 172 章 TRAC
查看>>
76.5. Attic - 拥有重复数据删除技术的备份软件
查看>>
MPLS LDP随堂笔记1
查看>>
软硬链接、文件删除原理、linux中的三种时间、chkconfig优化
查看>>
写在最前面 - 每天5分钟玩转容器技术(1)
查看>>
谈谈一些有趣的CSS题目(七)-- 消失的边界线问题
查看>>
睡眠不好
查看>>
159.3. salt 命令
查看>>
UWP 统一平台开发介绍
查看>>
15.25. Search
查看>>
Docker简明教程
查看>>
数据蒋堂 | 有序分组
查看>>
中化部署云计算胆大心细
查看>>
javascript原型理解一种
查看>>
C语言删除字符串中重复的字符
查看>>
云端灾难恢复的主要注意事项
查看>>
5大原因!解释为什么身份和访问管理(IAM)成为企业主流
查看>>