201903-5 317号子任务(并查集和Dijkstra最短路径)

博客讲述了如何使用并查集和Dijkstra算法解决多源最短路径问题。在面对可能不足K个可达行星发动机的情况时,通过并查集存储每个集合中行星发动机的数量,然后对每个据点执行Dijkstra算法。由于原始实现导致超时,作者调整策略,只对行星发动机执行Dijkstra搜索,但仍超时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

试题编号: 201903-5
试题名称: 317号子任务
时间限制: 1.0s
内存限制: 512.0MB
问题描述:



 

     看完题目,感觉是多源最短路径问题,最先想到的是对每个据点利用Dijkstra算法找到最近K个行星发动机的最短路径和,而这里有存在据点能到达行星发动机的数量不足K个的情况,因此在这里又加入了并查集对据点进行处理,将每一集和中存在的行星发动机数量保存在父节点中,即可通过查找每一据点的父节点知道能到达的行星发动机数量,进而进行Dijkstra算法。

     代码实现后为超时0分。具体如下:

#include <map>  
#include <cmath>  
#include <queue>  
#include <cstdio>  
#include <string>  
#include <cstring>  
#include <iostream>  
#include <algorithm> 
#include <sstream> 
#include <time.h> 
#include <vector>
#include <list>
#include <iostream>
#include<iomanip>
#define INF (0x3f3f3f3f)

using namespace std;
int  N, M, K;
bool Lei[10001];		//据点类型,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值