P2446 [SDOI2010]大陆争霸 (dijkstra)

本篇博客主要介绍了SDOI2010大陆争霸问题,这是一个带限制条件的最短路径问题。在求解过程中,遇到被保护的点时,必须等待所有限制该点的点都被到达后才能继续前进。解决方案包括两种情况:一是可以直接通过未被保护的点;二是需要等待限制点被全部到达后,才可通过被保护的点。关键在于计算通过每个点的最大时刻,即到达时刻和限制解除时刻中取较大者。
摘要由CSDN通过智能技术生成

题目:https://www.luogu.org/problem/P2446

Description: 

带限制的最短路,途中一些点被其他点限制,当限制该点的点都被到达后方可通过该点。你可以释放无限多个机器人替你跑路。

Solution:

情景一:当前到达的点没有被保护  =>  可以直接通过

情景二:当前到达的点被保护,不能通过 => 在门口等着,直到保护这个点的点都被到达,限制解除,之后方可通过

 通过一个点的时刻 = max(到达该点的时刻,保护该点的所有点都被到达的最后时刻)。

 

Code:

 code1:

#include<bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int MAXN = 3100;
int n, m;
int Map[MAXN][MAXN];
int num[MAXN]; //记录有多少个点保护这个点
int protect[MAXN][MAXN];
int dis1[MAXN]; //保护这个点的所有点被摧毁的最后时刻
int dis2[MAXN]; //到达这个点的时刻
int vis[MAXN];
void dijks
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值