POJ 3013 Big Christmas Tree (SPFA最短路)

Poj 3013 Big Christmas Tree 题目链接:http://poj.org/problem?id=3013 本题是最短路问题。 但是较特殊的一点是边少点多。构建临界矩阵不合理,因为是稀疏图,且点较多,会爆栈。 所以,正确的做法使用邻接表,邻接表又分为基于点的邻接表和基于边的,对于本题而言,我们用基于边的链式前向星较好。 另外,对于最短路的处理,我们用SPFA较好。 所以,综合,本题练习基于前向星的SPFA。 其实,SPF 阅读详情

题意看了好久才明白,圣诞树是一个树形结构,对于每条边,它的子孙节点等于这条边中深度较低的那个点的所有子孙节点。本题中一条边的费用就是这条边的所有子孙节点重量和乘上这条边的单位费用。

换一个角度考虑,考虑每个节点会被哪些边包括,答案就是从这个节点到根节点路径上的所有边。这样把每条边的单位费用当作权值,对每个点求一个最短路,答案就是每个点的重量乘上该点最短路的权值在做和。注意No Answer的情况。


代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#include <queue>
#include <vector>
#define LL long long
const LL INF= 1e15;
bool vis[50005];
LL d[50005];
int a[50005];
struct edge{
	int s,t,c;
	edge(){}
	edge(int ss,int tt,int cc):s(ss),t(tt),c(cc){}
};
int N,M;
vector<edge> E;
vector<int> G[50005];

void init(){
	for(int i=0;i<=N;i++){
		d[i]=INF;
		G[i].clear();
		vis[i]=0;
	}
	E.clear();
}

void addedge(int s,int t,int c){
	E.push_back(edge(s,t,c));
	G[s].push_back(E.size()-1);
}

void SPFA(){
	queue<int> Q;
	while(!Q.empty()) Q.pop();
	Q.push(1);
	vis[1]=1;
	d[1]=0;
	while(!Q.empty()){
		int cur=Q.front();Q.pop();
		vis[cur]=0;
		for(int i=0;i<G[cur].size();i++){
			edge &tmp=E[G[cur][i]];
			if(d[tmp.t]>d[cur]+tmp.c){
				d[tmp.t]=d[cur]+tmp.c;
				if(!vis[tmp.t]){
					vis[tmp.t]=1;
					Q.push(tmp.t);
				}
			}
		}
	}
}

int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		scanf("%d%d",&N,&M);
		init();
		for(int i=1;i<=N;i++){
			scanf("%d",&a[i]);
		}
		for(int i=1;i<=M;i++){
			int s,t,c;
			scanf("%d%d%d",&s,&t,&c);
			addedge(s,t,c);
			addedge(t,s,c);
		}
		SPFA();
		bool ok=1;
		LL res=0;
		for(int i=1;i<=N;i++){
			if(d[i]==INF){
				ok=0;
				break;
			}
			res+=d[i]*a[i];
		}
		if(!ok) printf("No Answer\n");
		else printf("%lld\n",res);
	}
	return 0;
}


《Sigrity SystemSI 2023+LPDDR4仿真自学笔记》(一)创建工程(Part1) 为了加强SystemSI 2023软件的熟悉度,咱们完整的走一个仿真全流程。 阅读详情

相关推荐

JSSIP实战:5分钟搞定WebRTC电话功能(附完整代码示例)

本文通过JSSIP库实战演示如何在Web应用中快速集成WebRTC电话功能。文章提供了从环境准备、SIP服务器连接到完整代码示例的详细步骤,涵盖用户注册、拨号接听、媒体流处理等核心环节,并针对常见问题给出排查方案,帮助开发者高效实现网页端实时语音通信。

u8v9w0x1y的博客 518

poj 3013 Big Christmas Tree spfa

题目大意 要建一棵圣诞树,使得总的花费最小。具体规则是:圣诞树是一颗无向树形图,其中,编号为1的节点为根节点,原始图中每条边具有边权,每个点也有一值权。圣诞树中,各条边的花费是该边权*该边的子树中所有点值,总的花费则是圣诞树中所有边的花费之和。 分析 1.对点u,只有从点u到根结点之间的边会乘以点u的重量。 2.所以,对于点u;最小的花费是要使点u到根结点的边权最小,即...

weixin_30611509的博客 177

手把手教你用Qt5打造二次元游戏启动器(附鸣潮同款UI源码)

本文详细介绍了如何使用Qt5框架从零开始构建一个功能完整、UI风格贴近《鸣潮》的二次元游戏启动器。教程涵盖无边框窗口、动态背景、自定义控件绘制、多线程资源加载以及下载管理等核心模块的实现,并提供了可运行的源码参考,帮助C++开发者和Qt爱好者深入掌握现代桌面应用开发技术。

weixin_29291863的博客 265

POJ 3013 Big Christmas Tree(dijkstra算法堆优化模板)

题意:要建一棵圣诞树,使得总的花费最小。具体规则是:圣诞树是一颗无向树形图,其中,编号为1的节点为根节点,原始图中每条边具有边权(unit):材料的单位价值;每个点也有一个权(weight):点的重量。生成树中,各条边的花费是该边权(unit)* 该边的子树中所有点的重量(weight)和,总的花费则是生成树中所有边的花费之和。 分析:1、在树中,两点的路径是唯一的 2、对点...

weixin_30371875的博客 232

数学:箭头符号→(to)都表示什么意义?

数学符号“→”在不同领域有不同含义:在逻辑中表示“蕴含”(p→q);在函数中表示映射关系(f:A→B);在极限中表示变量趋近(x→a);在推导过程中表示推理方向(A→B)。此外,它也可能用于向量表示或数列趋势。其具体含义需结合上下文判断,核心应用场景包括逻辑运算、函数定义、极限分析和数学推导等。

shunzi2016的博客 5573

分享一下使用Xilinx FPGA驱动MIPI DSI LCD屏的心路历程

分享一下调试用Xilinx FPGA驱动MIPI DSI LCD屏的心路历程,看到的朋友们,可以避免继续踩坑。

haoxingheng的专栏 5017

POJ 3013 Big Christmas Tree (SPFA最短路)

Big Christmas Tree Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 18507   Accepted: 3947 Description Christmas is coming to KCM city. Suby the loyal civilian in...

jackgege的专栏 290

Yolov5s可视化网络结构图

Yolov5共有四种网络结构,每种网络深度和宽度上都不相同。 (1) Yolov5s可视化网络结构图:点击查看 (2) Yolov5m可视化网络结构图:点击查看 (3) Yolov5l可视化网络结构图:点击查看 (4) Yolov5x可视化网络结构图:点击查看 ...

江南研习社 15万+

求最短路径算法之SPFA算法

关于求最短路径:        求最短路径的算法有许多种,除了排序外,恐怕是OI界中解决同一类问题算法最多的了。最熟悉的无疑是Dijkstra(不能求又负权边的图),接着是Bellman-Ford,它们都可以求出由一个源点向其他各点的最短路径;如果我们想要求出每一对顶点之间的最短路径的话,还可以用Floyd-Warshall。 关于松弛:       ...

qq_42848319的博客 2580

软件破解逆向安全(一)初识内存地址和偏移

工具:CE 内存:数字->存访在电脑中->内存 实例:如何修改植物大战僵尸阳光 内存搜索最核心:过滤数据 先用CE加载植物大战僵尸,如下图 我们可以看到目前我们的阳光数是50,我们尝试在ce里搜索精确数值,4 byte是int整数的表示。 我们发现有很多数据,尝试收集一个阳光变成75再次搜索: 我们发现就一个了,这时我们可以双击Value随便修改阳光的数值了。 这里我们说一下动态和静态地址 动态地址:临时用于存放数据的地址,黑色。特征:重新启动游戏地..

weixin_43781139的博客 2596

【深度学习|语义分割之UNet】如何使用ResNet50 作为 U-Net 网络的骨干网络(backbone)并使用预训练的 ResNet50 模型。附代码及解读。

【深度学习|语义分割之UNet】如何使用ResNet50 作为 U-Net 网络的骨干网络(backbone)并使用预训练的 ResNet50 模型。附代码及解读。

985小水博的摸鱼日常 3091

poj-3013-Big Christmas Tree-求最短路

题目的意思是让那你建立一颗圣诞树。 圣诞树以1为头结点。 圣诞树每条边的花费为当前边的权值乘以当前边的子树的节点的权值和。 那么就相当于求每个节点乘以节点到根节点的最短路的和。 #include #include #include #include #include #include #include #include #include #include using namespace

青竹梦 1422

2、机器人控制技术:阻抗/导纳控制与强化学习的融合

本文探讨了阻抗/导纳控制与强化学习在机器人控制中的融合应用。阻抗/导纳控制广泛应用于外骨骼和跟踪控制,通过改进方案提升建模误差下的鲁棒性;强化学习则为解决维度灾难、实现最优交互提供了有效途径,尤其在大输入空间、连续时间系统、冗余机器人及鲁棒控制中表现突出。结合近似器与合理奖励设计,强化学习可在无模型情况下实现高效控制。未来,两者融合有望推动更智能、更安全的机器人系统发展。

ice55的博客 300

POJ 3013 Big Christmas Tree(最短路Dijkstra+优先队列优化,SPFA)

POJ 3013 Big Christmas Tree(最短路Dijkstra+优先队列优化,SPFA)

水果君の日常 2370

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

POJ 3013 Big Christmas Tree【最短路变形,DIjkstra堆优化+spfa算法】

Big Christmas Tree Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 23064   Accepted: 4987 Description Christmas is coming to KCM city. Suby the loyal ci

AC_Dreameng 1989

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

最短路SPFA——Big Christmas Tree ( POJ 3013 )

题目链接: http://poj.org/problem?id=3013 分析: 给出N个点和M条边,每个点有它的权值,每条边也有它的权值,建造这条边的花费等于这条边的权值*另一端端点的子树所包含的点的权值和。求连接所有点以点1为根节点构造出一颗树的最小花费。 题解: 通过计算可以推断出,每个点的权值会被计算多次,但是只有从根节点到该点的边才会乘以该点的权值,所以我们可以把问题转换为求根节点1

FeBr2的博客 793

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

poj 3013 spfa 最短路 Big Christmas Tree

Description Christmas is coming to KCM city. Suby the loyal civilian in KCM city is preparing a big neat Christmas tree. The simple structure of the tree is shown in right picture. The tree can

messyidea的专栏 463

POJ 3013 - Big Christmas Tree(最短路spfa)

http://poj.org/problem?id=3013

三水的鱼塘♂ 207

poj 3013 big christmas tree 最短路SPFA

Big Christmas Tree     Christmas is coming to KCM city. Suby the loyal civilian in KCM city is preparing a big neat Christmas tree. The simple structure of the tree is shown in right picture.

>*,< 252

POJ 3013 Big Christmas Tree (最短路 spfa)

题意:t个样例,v个点,e条边。让你把所有的点都链接起来,并算出这个以1为根的树的重量等于多少。思路: 对于这组样例: 7 7 200 10 20 30 40 50 60 1 2 1 2 3 3 2 4 2 3 5 4 3 7 2 3 6 3 1 5 9 题目中给出的规则是这样的:假设现在咱们要算2这个点的重量,那么我们就需要把2的所有子节点的权值加起来再乘以这条边的权值:(2

普通で歩む 291

POJ3013 - Big Christmas Tree - 最短路变形

1.题目描述: Big Christmas Tree Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 24123   Accepted: 5236 Description Christmas is coming to KCM city. Suby

终有绿洲摇曳在沙漠 338

题解:poj3013 Big Christmas Tree 【最短路】

传送门 这个题题意是,给一个n个节点的图,在要求其一棵以1结点为根的生成树使树的边权和最小,树边权 = 对应的图边权 * 树边末端点为根的子树所有结点对于图顶点的点权和 然后就是直接跑最短路 (我爱SPFA) #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;queue&gt; #include&lt;cstring&gt; u...

子衿君的博客 263

POJ 3013 Big Christmas Tree(SPFA)

解题思路 模拟 AC 代码如下

MaxVen 174

POJ 3013 Big Christmas Tree(SPFA)

题目地址:http://poj.org/problem?id=3013 来源:POJ 题意:有t组数据,有n个点,每个点的有一个权值,m条边.在保证所有的点都构成一个数的情况下,求cost[i]*sum[i]之和(cost[i]表示与这个点的父结点相连的边的权值,sum[i]表示这个点及这个点的孩子的权值之和). 即便是知道了最短路问题(刚开始应该会想成最小生成树),但是这个题还是有很多需要...

Sun 273

POJ-3013: Big Christmas Tree(dij,spfa)

最短路

swust_Three的博客 578

POJ 3013 Big Christmas Tree 最短路

输入V,E; 接下来V个数字代表每个节点的重量; 接下来E行每行输入a,b,s;代表A-B距离为S,注意为无向图;求最短路。 注意:数据范围,得开long long 。而且SPFA初始化的时候INF得大。一开始我用inf(1 #include #include #include #include #include #include #include #include #in

just_water 786
上一篇: HDU 3974 Assign the task (线段树)
下一篇: POJ 1170 Shopping Offers (状压DP)
Baoli1008
博客等级 码龄12年 70粉丝 293原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值