博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 题解 UVA1395 【苗条的生成树 Slim Span】
阅读量:6232 次
发布时间:2019-06-21

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

【题意】

给出一个\(n(n<=100)\)个节点的的图,求最大边减最小边尽量小的生成树。

【算法】

\(Kruskal\)

【分析】

首先把边按边权从小到大进行排序。对于一个连续的边集区间\([L,R]\),如果这些边使得\(n\)个点全部联通,则一定存在一个苗条度不超过\(W[R]-W[L]\)的生成树(其中\(W[i]\)表示排序后第\(i\)条边的权值)。

从小到大枚举\(L\),对于每个\(L\),从小到大枚举\(R\),同时用并查集将新进入\([L,R]\)的边两端的点合并成一个集合,与\(Kruskal\)算法一样。当所有的点都联通是停止枚举\(R\),换下一个\(L\)(并且把\(R\)重置为\(L\)),继续枚举。

【代码】

#include
using namespace std;const int MAXN=100+10;const int MAXM=10000+10;int n,m;int fa[MAXN];int maxn,ans=0x3f3f3f3f;struct Node{ int u,v,w;}edge[MAXM];inline int read(){ int tot=0; char c=getchar(); while(c<'0'||c>'9') c=getchar(); while(c>='0'&&c<='9') { tot=tot*10+c-'0'; c=getchar(); } return tot;}inline bool cmp(Node x,Node y){ return x.w

刘汝佳大法好!

转载于:https://www.cnblogs.com/hulean/p/11123027.html

你可能感兴趣的文章
总结bash编程基础,引入函数结构化编程。
查看>>
redhat linux忘记登陆密码之解决办法
查看>>
RHEL 6 LAMP(一)
查看>>
Nginx负载均衡
查看>>
理解 virbr0 - 每天5分钟玩转 OpenStack(11)
查看>>
屡败屡战,攻克中项(系统集成项目管理师考试经历分享)
查看>>
SQL 2008 群集配置详尽攻略[2]--设置故障转移集群
查看>>
OSPF中使用完全次末节区域--total nssa
查看>>
unity3D与网页的交互---做项目的一点总结
查看>>
Nginx—核心配置location匹配规则说明
查看>>
分布式监控之Zabbix-Server
查看>>
Zone-based User Based Firewall
查看>>
AWS CLI使用s3
查看>>
在jfinal中使用druid,并配置查看权限
查看>>
视频+书签 Powerpiont2010可以这样玩
查看>>
如何限制GNS3中CPU的使用率(ASA)
查看>>
首都机场以后也能刷脸坐飞机了
查看>>
PyQt的Layout的比例化分块。
查看>>
python os模块
查看>>
随机生成验证码
查看>>