连通森林(最小生成树)
题目描述
在有向图G中,如果两个顶点u,v间有一条从u到v的有向路径,同时还有一条从v到u的有向路径,则称两个顶点强连通。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向非强连通图的极大强连通子图,称为强连通分量。 不连通的单个的点也被称为一个强连通分量
现有一个n个点m条双向边的图,每条边有一个权值L,从m条边中选出若干条,形成一个含有k个强连通分量的图且选用的边的权值和最小
输入描述
第一行:输入三个数n、m、k,分别表示n个点,m条边,形成含有k个强连通分量的图
接下来m行:每行输入三个数,x、y、L,表示x和y之间有一条权值为L的双向边
对于 30% 的数据: n ≤ 100 m ≤ 1000 L ≤ 10000
对于100%的数据: n ≤ 1000 m ≤ 10000 L ≤ 10000
输出描述
如果可以形成含有k个强连通分量的图,输出选用边的权值和的最小值
如果不能形成则输出“ No Answer”
样例
输入
3 1 2 1 2 1
输出
1
讲解
因为这道题是要求找到最小的权值和,所以这道题一定是某种求最小值的算法
且这个只要联通就行,无需成圈,所以是棵树
就是最小生成树
因为要分为K部分所以是K棵最小生成树
下面为代码
#include<cstdio>
#include<algorithm>
using namespace std;
struct node{int x,y,l;
}a[10005];
//排序
bool cmp(const node a,const node b){return a.l<b.l;
}
int f[1005];
int n,m,k,cnt,sum;
//并查集的查找
int find(int x){if(x==f[x])return x;return f[x]=find(f[x]);
}
//并查集的初始化
void init(){for(int i=1;i<=1000;i++)f[i]=i;
}
//最小生成树
void kruskal(){sort(a+1,a+1+m,cmp);for(int i=1;i<=m;i++){int x=find(a[i].x),y=find(a[i].y);if(x==y)continue;sum+=a[i].l;cnt++;f[x]=y;if(cnt==n-k)break;}if(n-k==cnt)printf("%d",sum);elseputs("No Answer");
}
int main(){scanf("%d%d%d",&n,&m,&k);init();//读入for(int i=1;i<=m;i++)scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].l);kruskal();return 0;
}
连通森林(最小生成树)相关推荐
- POJ 3723 - Conscription ( 最大权森林 / 最小生成树 )
题意 挑选N个女兵,M个男兵,雇佣每个人都需要支付10000元的费用,如果男a和女b存在亲密度d,只要他们其中有一个已经被选中,那么在选另一个人需要的费用为100000-d,给定R个关系,输出一个最低 ...
- 最小生成树 解释 + 板子题
学习链接:https://oi-wiki.org/graph/concept/ 带有步骤:最小生成树 - 哎呦哎(iui) - 博客园 概念: 边权和最小的生成树 (v:点 g:边 | 只有连通 ...
- 最小生成树之prim
prim是设置一个初始结点,寻找其周围最小的边权值,并将该结点作为初始结点,继续寻找现在结点周围的边权值的最小值,但要注意如果这次寻找的某个边权值没有上次的小的话仍然保留上一次的边权值,即lowcas ...
- 最小生成树的java实现
文章目录 一.概念 二.算法 2.1 Prim算法 2.2 Kruskal算法 笔记来源:中国大学MOOC王道考研 一.概念 连通图:图中任意两点都是连通的,那么图被称作连通图 生成树:连通图包含全部 ...
- prime算法详解【最小生成树】
无以言表我对着代码懵了两个小时终于看懂了的鸡冻,手写程序大法好哇,[或者只是我太久没敲代码了..]个人感觉这个算法还是有点粗鲁,大量的遍历,比较中意最小生成树的另一个算法,一会搞懂它的代码再说. 最小 ...
- 7-14保持安全社交距离的重要性 最小生成树板子题
在新冠疫情期间保持社交距离非常有必要,疾控专家普遍认为保持1米以上的距离可以有效减缓疫情传播.现在给定一些人的坐标,请你计算一下他们是否都安全,如果不安全,那么新冠病毒最快多久能感染所有人.为了方便计 ...
- ACWING347. 野餐规划(最小生成树)
一群小丑演员,以其出色的柔术表演,可以无限量的钻进同一辆汽车中,而闻名世界. 现在他们想要去公园玩耍,但是他们的经费非常紧缺. 他们将乘车前往公园,为了减少花费,他们决定选择一种合理的乘车方式,可以使 ...
- 考研数据结构--严版图相关代码 自用
自用,写的很乱 1.BFS void BFSTraverse(Graph G,Status (*visit)(int v)) {for(int v = 0; v < G.vexNum; v++) ...
- 数据结构与算法一览(树、图、排序算法、搜索算法等)- Review
算法基础简介 - OI Wiki (oi-wiki.org) 文章目录 1. 数据结构介绍 1.1 什么是数据结构 1.2 数据结构分类 2. 链表.栈.队列:略 3. 哈希表:略 4. 树 4.1 ...
最新文章
- 程序员绩效总结_闲聊程序员的绩效考核
- Android中通过自定义签名控件实现手写签名
- 143. Reorder List 重排链表
- android 画布裁剪,一种基于Android系统对UI控件进行轮廓剪裁及美化的方法与流程...
- 不要在foreach循环里进行元素的remove/add操作。remove元素请使用iteratot方式,如果并发操作,需要对Iterator对象加锁
- centos6 python3 django-uwsgi-nginx使用supervisor作为uWSGI的守护进程
- NHibernate之映射文件配置说明
- sklearn模型保存
- 浮点数不能全等比较吗php,php的一些易错知识点整理 | 木凡博客
- Jmeter中主要管理器功用
- Linux系统管理员应该知道的20个系统监控工具
- 中国中小管理咨询公司现状
- 在matlab中使用模糊编辑器实现模糊控制器的设计详解
- Mosek学习笔记2:优化
- opencv-视频处理--画感兴趣区域(ROI)
- Java大学生特训营 疫情地图项目实战课
- 赵小楼《天道》《遥远的救世主》深度解析(35)你觉得叶晓明、冯世杰、刘冰是底层吗?
- 大数据Spark(三十九):SparkStreaming实战案例四 窗口函数
- vue大屏展示高度自适应
- STM32单片机烧录失败汇总
热门文章
- Java线程池和阻塞队列
- 今天济南下了好大的雨
- 鸿蒙幼儿园名称分析,幼儿园大班社会场:名字挖掘的意义
- Word的样式库在 选项卡中_“页眉页脚如何设置?”方法很多种,这种最简单|Word页眉页脚...
- Redis完整体系知识
- 索尼Xperia Z2 SGP521/SGP 511 无限重启的解决
- PX4从放弃到精通(二):ubuntu18.04配置px4编译环境及mavros环境
- Java基本类型占用的字节数(char占用几个字节问题)
- 使用Cocos2d-x 开发3D游戏-卞安-专题视频课程
- windows使用小技巧-----设置电脑免密码登录