POJ 3164 有向图的最小生成树

最小树形图(有向图的最小生成树) 我们知道,无向图的最小生成树的求法有Krusal和prime算法,一个是归点一个是归边,在具体实现上Krusal可以用并查集实现,难度不大。 这里稍微区别一下最短路径和最小生成树(因为我又搞混了23333) 最小生成树能够保证首先是树(对于n个顶点的图只有n-1条边),其次保证任意两个顶点之间都可达,再次保证这棵树的边权值之和为最小,但不能保证任意两点之间是最短路径; 最短路径保证从源点S到目地... 阅读详情

题意:给出n个点以及每个点的坐标,以及m条有向边(边权为两点距离),求一个最小生成树,使1号点可以到达其它所有点。

思路:朱刘算法

1)找出除根节点外其它点 i 的最小入边,将边权 in[i] 加入答案

2)若找出的边不构成环,输出答案;若没有找到入边,无解

3)否则将找到的环缩为一个点,重新设置其它边 i -> j 的权为 w[i][j] - in[j](相当与删去原来指向 j 的边,将其代替为这条边),若i, j在同一个环中,接下来都应该忽略这条边

4)重复上述步骤

注意自环不能加入

暴力的(n ^ 3)代码:

#include <cstdio>
#include <cmath>
#include <cstring>

#define For(i,j,k) for(int i = j;i <= k;i ++)
#define Set(i,j) memset(i, j, sizeof(i))

using namespace std;
const int N = 110, M = 11000;

struct Edge{
	int x, y;
	double w;
}E[M];

int n, m, id[N], vis[N], pre[N];
double in[N];

void Solve(){
	double ret = 0;
	while(1){
		For(i,1,n) in[i] = 1e18;
		Set(id, 0), Set(vis, 0);
		For(i,1,m){
			int u = E[i].x, v = E[i].y;
			if(u != v && in[v] > E[i].w) in[v] = E[i].w, pre[v] = u; 
		}
		For(i,2,n)
			if(in[i] > 1e8){
				puts("poor snoopy");
				return;
			}
		int cnt = 1;
		id[1] = 1;
		For(i,2,n){
			ret += in[i];
			int v = i;
			while(!id[v] && vis[v] != i){
				vis[v] = i;
				v = pre[v];
			}
			if(!id[v]){
				++cnt;
				while(!id[v]) id[v] = cnt, v = pre[v];
			}
		}
		if(cnt == 1) break;
		For(i,2,n) if(!id[i]) id[i] = ++cnt;
		For(i,1,m){
			int u = E[i].x, v = E[i].y;
			E[i].x = id[u], E[i].y = id[v];
			if(id[u] != id[v]) E[i].w -= in[v];
		}
		n = cnt;
	}
	printf("%.2f\n", ret);
}

int px[N], py[N];

double dis(int x, int y){
	return sqrt(x * x + y * y);
}

int main(){
	while(scanf("%d%d", &n, &m) == 2){
		For(i,1,n) scanf("%d%d", &px[i], &py[i]);
		For(i,1,m){
			scanf("%d%d", &E[i].x, &E[i].y);
			E[i].w = E[i].x == E[i].y ? 1e9 : dis(px[E[i].x] - px[E[i].y], py[E[i].x] - py[E[i].y]);
		}
		Solve();
	}
	return 0;
}


Rust 编译工具链配置指南:从 link.exe 缺失到完美解决 本文详细解析了Windows下Rust编译时常见的'link.exe not found'错误,提供了MSVC和MinGW-w64两种工具链的完整配置指南。从Visual Studio组件安装到环境变量设置,再到疑难排查技巧,帮助开发者彻底解决Rust编译工具链配置问题,提升开发效率。 阅读详情

相关推荐

Vue项目实战:5分钟搞定高德地图离线部署(附避坑指南)

本文详细介绍了在Vue项目中实现高德地图离线部署的完整方案。针对内网或网络隔离环境,通过获取并改造JSAPI文件、下载组织地图瓦片数据,并集成vue-amap组件,实现地图功能的本地化运行。文中提供了核心代码、避坑指南及性能优化建议,帮助开发者快速构建稳定可靠的离线地图应用。

data3的博客 935

prim算法_图的生成树之最小生成树(Prim)

树一般来说是基于图而生的,而树是一种特殊的图:无环连通图。定义1:对于无向图G和一棵树T来说,若T中与G中所包含的节点相同,但是边不相同,且T恰好是无环的连通图,那么称T为G的生成树。对于图的生成树,主要有无向图的最小生成树、次小生成树和有向图的最小树形图三种问题。这一次我们主要讲比较容易理解的最小生成树。那什么是最小生成树呢?有以下定义:定义2:对于一个具有边权的图来说,其边权和最小的生成树称作...

weixin_39610724的博客 842

2021年软件测试面试题大全

简述测试流程: 1、阅读相关技术文档(如产品PRD、UI设计、产品流程图等)。 2、参加需求评审会议。 3、根据最终确定的需求文档编写测试计划。 4、编写测试用例(等价类划分法、边界值分析法等)。 5、用例评审(主要参与人员:开发、测试、产品、测试leader)。 6、开发提交代码至SVN或者GIT ,配管搭建测试环境。 7、执行测试用例,记录发现的问题。 8、验证bug与回归测试。 9、编写测试报告。 10、产品上线。 补充测试用例设计过程: 根据需求得出测试需求 设计测试方

hard_days的博客 20万+

最小树形图【有向图的最小生成树】

  做了POJ的一道题,总是WA,不知道为什么,后来去看了,才知道,原来有向图的最小生成树与无向图不一样,它得是从某个点出发能遍历到其他所有点的才行,以此为条件,我们学习到了最小树形图。   与很多其他人的讲解不一样吧,我把我看了博客后自己的思路分享出来,关于什么是最小树形图。   我们知道的既然要建立最小树形图,就要理解什么是最小树形图,(概念好难懂啊,还是自己写的清楚明白),我们从某一点出...

既然弱小,就只顾变强就是了 4645

单片机多级菜单的简单实现

单片机多级菜单的简单实现 多级菜单的思路 最近想把stm32上的oled显示屏做的好看一些,于是动手写了写一个多级菜单,思路很简单,每个页面用单独的函数封装好,每个功能也是用单独的函数进行封装,用了3个按键,两个切换键,一个确定键。 首先来看看用啥判断页面的(这偷个懒,希望没人打我) //页面标志位 uint8_t s1 = 0; //主页面功能号 uint8_t s2 = 0; //主次页面判断标志位 uint16_t s3 = 1; //次页面功能号 主页面的显示函数,这是个很枯燥的一

qq_43940175的博客 7604

遗传算法驱动吃豆人进化:从零构建AI游戏智能体

遗传算法是一种模拟自然选择过程的优化技术,其核心原理是通过选择、交叉和变异等操作,在解空间中迭代搜索最优解。该技术为解决复杂优化问题提供了强大工具,尤其在游戏AI、机器人控制和参数调优等场景中价值显著。在游戏AI领域,遗传算法常被用于训练智能体自主决策,例如在经典游戏《吃豆人》中,通过定义智能体的“基因”(如神经网络权重)和“适应度”(如游戏得分),可以引导其进化出躲避幽灵、高效吃豆等策略。本项目结合Pygame框架与神经网络,构建了一个完整的遗传算法训练沙盒,详细展示了如何通过适应度函数设计和参数调优,实

weixin_30467199的博客 272

最小树形图(刘朱算法)

<br />学了不少算法,终于第一次学会了以中国人的名字命名的算法,最小树形图的朱-刘算法。前几天看过书、ppt和网上相关的blog,在收缩环关键的那块总看得稀里糊涂。昨晚终于在威士忌的blog上看到了一幅最小树形图的构造流程图,登时大彻大悟。有时一张恰当好处的图表的确胜过万千文字解说。早上起来把它实现了,调试到现在,进一步把各种模糊的细节处理弄清楚了,也终于AC了POJ3164。呵呵<br />网上关于算法的描述有一些,我总结成bin3版。<br />有固定根的最小树形图求法O(VE):<br />首先消

hqd_acm的专栏 5209

学习STM32的ADC采集声音

为了采集声音信号,需要一个声音传感器(如麦克风),将声音信号转换为电压信号输入到 ADC 引脚。通过硬件准备、STM32CubeMX 配置和代码实现,我们可以实现将声音信号转换为数字信号,并进行后续处理。STM32 是一款广泛应用于嵌入式系统开发的微控制器平台,其拥有丰富的外设和强大的性能,非常适合进行 ADC(模拟数字转换)的声音采集。函数启动 ADC1 的连续转换模式,然后在一个无限循环中等待 ADC 转换完成,并读取采样结果。四、代码实现 在生成的代码中,会生成一些相关的库文件和示例代码。

m0_75244442的博客 2173

有向图最小生成树

int pre[maxn];//最短弧前驱 int vis[maxn];//点标记 int used[maxn];//查环过程的标记 double Map[maxn][maxn];//存图关系 int n,m,u,v,len; double zhuliu(int root) { double sum=0; int i,j,k; memset(vis,0,sizeof v...

兜率工的博客 4474

YOLO26引入ECA-Net的改进版变体:1D卷积在2026目标检测的极致压榨

摘要: 2026年发布的YOLO26通过移除DFL模块、支持无NMS推理等革新成为边缘计算新标杆。为进一步提升性能,研究聚焦轻量级通道注意力机制ECA-Net,其核心创新在于用1D卷积替代传统全连接层,仅需5个参数即可实现高效通道交互。数学分析表明,ECA模块在ResNet50上仅增加80个参数,却能带来2%以上的精度提升。这种"极致压榨"的设计理念与YOLO26的轻量化特性高度契合,为在几乎不增加计算开销的前提下提升模型性能提供了可行方案。技术验证显示,该组合在COCO数据集上实现了检测精度与推理效率的双

ZDQ58818的博客 262

vue支付项目-APP支付宝支付功能

如果用户已安装支付宝客户端,商家 App 唤起支付宝完成支付,支付完后跳回到商家 App 内,最后展示支付结果。如果用户没有安装支付宝客户端,商家 App 内会调起支付宝网页支付收银台,用户登录支付宝账号,支付完后展示支付结果。1.点击按钮开通或者续费,会验证是否选择会员商品以及对协议是否查看选中(这里根据项目需要自行验证,可忽略),验证通过打开选择支付方式弹窗页面,选择微信支付或者支付宝支付;4.可取消支付,放弃支付会返回会员页面,页面提示支付取消;1.判断支付方式,如果是2,则是支付宝支付方式。

总结前端开发中遇到的问题,分享前端知识 1万+

图解朱刘算法:从POJ3164到HDU2121,手把手教你搞定有向图最小生成树

本文详细解析了朱刘算法(Edmonds算法)在有向图最小生成树问题中的应用,从最小树形图的基本概念到算法实现细节,通过POJ3164和HDU2121等经典例题进行实战演练。文章深入浅出地讲解了算法的核心思想和优化技巧,帮助读者掌握这一解决有向图最小生成树问题的利器。

weixin_33739523的博客 390

【雕爷学编程】Arduino动手做(111)---震动提醒模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。

雕爷学编程 1897

POJ3164:Command Network(有向图的最小生成树)

Command Network Time Limit:1000MS Memory Limit:131072K Total Submissions:20766 Accepted:5920 题目链接:http://poj.org/problem?id=3164 Description: After a long lasting...

dft539533的博客 109

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【POJ3164】【有向图的最小生成树】【自己的模板】

Command Network Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 14811   Accepted: 4259 Description After a long lasting war on words, a war on arms fina

ACM之路 461

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

朱刘算法 有向图定根的最小生成树poj3164

关于为什么不能用Prim求解此类问题,如下 Prim可以看成是维护两个顶点集或者看成维护一颗不断生成的树(感觉前一种说法好一点) 倘若是有向图有三个顶点1.2.3 边的情况如下 1->2: 5 1->3: 6 2->3: 1000861 3->2: 2 显然若是按照Prim算法来说,...

weixin_30914981的博客 186

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

朱刘算法实战:从POJ3164到HDU2121,手把手教你搞定有向图最小生成树

本文深入解析了朱刘算法(Edmonds算法)求解有向图最小树形图的核心原理与实现细节。通过拆解算法步骤,并结合POJ3164和HDU2121两道经典竞赛题进行实战演练,手把手指导如何应对无根树、输出方案等进阶挑战,帮助读者从理论到代码全面掌握这一关键图论算法。

chair的专栏 518

最小树形图--有向图的最小生成树 poj 3164 Command Network

【最小树形图】: 就是给有向带权图中指定一个特殊的点root,求一棵以root为根的有向生成树T,并且T中所有边的总权值最小。 最小树形图必须有一个根,而且选择不同的点作为根,也是不一样的结果。 最小树形图必须包含图中的每一个节点,并且均可通过有向边到达根节点root 最小树形图的第一个算法是 1965年朱永津和刘振宏提出的复杂度为O(VE)的算法。 Command Network Time Limit: 1000MS Memory Limit: 131072K Total Submissions:

雪的期许 2602

POJ-3164 Command Network(最小树形图(有向图的最小生成树)[朱刘算法])

朱刘算法大致步骤: ① 找到除根结点的所有点的最小权值入边(非自环) ② 若存在除根结点的其他点无入边(非自环),则无最小树形图,否则继续 ③ 若不存在环,则返回当前权值和,否则将每一个环缩成一点 ④ 建立新图 先做到简单点最小树形图,看完算法时,还想保留原图继续添加点和边的话,复杂度很高 看了模板后,发现模板直接在原图的点和边操作,简单明了

idealism_xxm的专栏 662

POJ - 3164 Command Network 最小树形图--有向图的最小生成树

题意: 给出可以连接的两个点,并且是单向边,问最后最小生成树。 分析: 朱刘算法模板: #include &lt;cstdio&gt; #include &lt;cmath&gt; #include &lt;cstring&gt; using namespace std; const int maxn=105; #define INF 0x3f3f3f3f double p[ma...

兜率工的博客 325

POJ3164 最小树形图 有向图的最小生成树 模板题 朱刘算法 朱永津-刘振宏算法

算法思想: 0. 若从根开始走有哪个点无法走到则没有最小树形图,甚至树形图都没有。 1. 对每个点求一个边权最小的前驱(求最小弧),并且对这些最小弧建新图(思想上建图) 2. 在新图上对每个环缩点,然后循环过程【1】; 3. 缩到不能再缩时(某次遍历没有环可以缩),则ans=∑除根节点以外每个点的最小弧权值 4. 返回ans算法完成实现。

辗转山河弋流歌 2740

Command Network POJ - 3164 有向图的最小生成树(最小树形图朱刘算法)

有向图的最小生成树(最小树形图朱刘算法)题意 给你N个点的坐标和M条有向边,问你以点1为根的最小树形图的边权之和。思路 套用朱-刘算法 求解最小树形图即可 复杂度O(EV)设根结点为v0,(1)求最短弧集合E0   从所有以vi(i ≠ 0)为终点的弧中取一条最短的,若对于点i,没有入边,则不存在最小树形图,算法结束;如果能取,则得到由n个点和n-1条边组成的图G的一个子图G’,这个子图的权值一

yanga11ang的博客 489

最小树形图 【poj 3164 Command Network】

定义:在有向图上的最小生成树。 算法过程:和最小生成树一样,不过这个不是无向图的,但是也可以用类似的算法,最小树形图的第一个算法数朱刘算法,依据最小生成树数算法形成的。 我们知道,在最小生成树算法中,我们每次选长度最短的边,如果满足条件则加入最小生成树中,知道所有的点都在树中,最小树形图同样。 首先和最小生成树一样,首先必须保证图联通,否则不能形成最小树形图。 但是由于是有向的,而

大神养成中..... 1248

poj 3164(最小树形图)

题目链接:http://poj.org/problem?id=3164 思路:朱刘算法,模版题。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> ...

weixin_30511107的博客 71

POJ - 3164-Command Network 最小树形图——朱刘算法

POJ - 3164 题意: 一个有向图,存在从某个点为根的,可以到达所有点的一个最小生成树,则它就是最小树形图。   题目就是求这个最小的树形图。 参考资料:https://blog.youkuaiyun.com/txl199106/article/details/62045479 #include <iostream> #include <cstdio> ...

weixin_30822451的博客 138

最小树形图(朱刘算法)

用途 在有向图中给一个根节点求它的最小生成树,或者判断是否有解。 变形 不定根的最小树形图,并输出序号最小的根 这时我们需要建立一个虚根,虚根到所有点的权值要大于所有权值的总和(edge&gt;sumedge &gt; sumedge>sum),因为加入虚根肯定有解。 当求出的ans−edge≥edgeans - edge \ge edgeans−edge≥edge说明原图...

Running Bit. 508
上一篇: POJ 2989 Bron-Kerbosch算法 极大团数量
下一篇: NOIP2016
dy0607
博客等级 码龄12年 16粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值