题解 UVa10842(Kruskal)
时间:2019-08-30
本文章向大家介绍题解 UVa10842(Kruskal),主要包括题解 UVa10842(Kruskal)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
最小大生成树。
这题几乎就是模板。看我翻译:
一个城市由N个节点,M条带权无向边组成。城市连通。由于公路养护部门预算不足,需要在城市连通的情况下关闭尽可能多的道路,且使剩余权值最小的道路权值尽可能大。求出这个权值。
因为图要连通,边要最少且边权尽量大,显然我们将要得到的是图的最大生成树。用Kruskal好求。
Kruskal通过将边排序,借助并查集判断当前边是否多余(不能有环)来尽量把更小(大)的边放入生成树。还有一种算法叫Prim求生成树。
代码:
#include<bits/stdc++.h>
using namespace std;
struct node
{
int a,b,d;
}edge[20000];
bool cmp(node x,node y)
{
return x.d>y.d;
}
int n,m,father[6000],ans,num;
int find(int x)//寻找祖先
{
if(father[x]-x)
father[x]=find(father[x]);
return father[x];
}
void pt(int x,int y)//合并
{
x=find(x);
y=find(y);
father[y]=x;
}
bool check(int x,int y)//判断是否连通
{
x=find(x);
y=find(y);
if(x==y)
return 1;
else
return 0;
}
int main()
{
int t;
cin>>t;
for(int f=1;f<=t;f++)
{
cin>>n>>m;
for(int i=1;i<=n;i++)
father[i]=i;
for(int i=1;i<=m;i++)
{
int x,y,w;
cin>>x>>y>>w;
edge[i].a=x;
edge[i].b=y;
edge[i].d=w;
}//建图,不需要邻接矩阵或邻接表,这样就行了,也好排序
sort(edge+1,edge+1+m,cmp);//排序
for(int i=1;i<=m;i++)
if(find(edge[i].a)-find(edge[i].b))//并查集操作
{
pt(edge[i].a,edge[i].b);//连通
ans=edge[i].d;//由于已经排序,边长单减,后加的边必定更小,因此直接更新答案。
num++;
if(num==n-1)//对于树,边数为点数减1
break;
}
printf("Case #%d: %d\n",f,ans);
num=ans=0;//输出答案后记得清0
}
return 0;
}
原文地址:https://www.cnblogs.com/s-t-a-r-d-u-s-t/p/11436843.html
- 使用Swagger2Markup实现API文档的静态部署(二):Markdown和Confluence
- Dubbo官方的Starter发布1.0.0测试版,与Spring Boot的结合将更加自然
- spring-boot-starter-swagger 1.2.0.RELEASE:新增分组配置功能
- 领域驱动设计
- Spring Boot中使用JavaMailSender发送邮件
- Spring Boot的应用限流
- Spring Cloud构建微服务架构:服务网关(过滤器)【Dalston版】
- 虚拟机类加载机制
- 深入理解JVM垃圾收集机制(JDK1.8)
- 你真的懂let和const吗?
- MYSQL GTID使用运维介绍
- MongoDB系列一(查询).
- Angular CLI 简介
- 编程思想 之「接口、内部类」
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【一起学系列】之代理模式:是为了控制访问啊!
- 【一起学系列】之剩下的设计模式们
- 如何使用k3OS和Argo进行自动化边缘部署?
- 设计模式总篇:从为什么需要原则到实际落地(附知识图谱)
- 一文入门DNS?从访问GitHub开始
- 没内鬼,来点干货!SQL优化和诊断
- 好像很厉害的生成器!一秒钟搞定一个项目
- 【一起学系列】之策略模式:好多鸭子啊
- 没内鬼,来点干货!volatile和synchronized
- 【一起学系列】之观察者模式:我没有在监控你啊
- Celery 4 初体验及踩坑
- MySQL 最佳实践:gh-ost 工具使用详解
- 如何将 Hexo 博客部署到云开发静态网站托管
- WordPress 静态化部署到云开发网站托管
- 如何用云应用快速部署一个nodebb的开源论坛