首页 > 其他分享 >P9751 [CSP-J 2023] 旅游巴士

P9751 [CSP-J 2023] 旅游巴士

时间:2024-12-06 22:13:28浏览次数:10  
标签:const P9751 int dijkstra 2023 include nt CSP dis

题目要求时间必须是 $k$ 的非负整数倍,所以想到了升维。这样就变成了一道分层图最短路的题目。用 BFS 算法可以拿到 $A_i=0$ 的 $35$ 分。

  • 满分思路

其实部分分的思路已经很接近正解了,想要拿到满分只需要做一点小小的调整。虽然说不能在路上停留,但是我们可以晚一点到达起点。但是要注意:到达起点的时间也必须是 $k$ 的倍数。这个做法 BFS 就解决不了了(它只能解决出发时间相同且边权为 $1$ 的最短路问题),我们可以使用 Dijkstra 算法来解决这道题。时间复杂度约 $O($ $n$ $+$ $m \cdot log_2m$ $)$。

  • 代码

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <cstring>
#include <cmath>
using namespace std;
const int INF = 0x3f3f3f3f; // 极大值∞

int n, m, k;
int dis[10010][110]; // 最短路
int vis[10010][110]; // 记录点有没有被选过

struct edge // 边
{
	int y, w;
} ;

struct node // 优先队列中的点
{
	int x, t, d;
	
	bool operator < (const node b) const // 重载运算符
	{
		return d > b.d;
	}
} ;

vector<edge> g[10010]; // 图

void add(int x, int y, int w) // 建边
{
	g[x].push_back({y, w});
}

void dijkstra(int s) // dijkstra算法,堆优化
{
	priority_queue<node> q;
	memset(dis, 0x3f, sizeof(dis));
	q.push({s, 0, 0});
	dis[s][0] = 0;
	while (q.size())
	{
		int x = q.top().x;
		int t = q.top().t;
		q.pop();
		if (vis[x][t])
			continue;
		vis[x][t] = 1;
		int nt = (t + 1) % k;
		for (int i = 0; i < g[x].size(); i++)
		{
			int y = g[x][i].y;
			int w = g[x][i].w;
			int d = dis[x][t];
			if (d < w) d += (w - d + k - 1) / k * k; // 到达起点时间
			if (dis[y][nt] > d + 1)
			{
				dis[y][nt] = d + 1;
				q.push({y, nt, dis[y][nt]});
			}
		}
	}
}

int main()
{
	cin >> n >> m >> k;
	for (int i = 1; i <= m; i++)
	{
		int u, v, w;
		cin >> u >> v >> w;
		add(u, v, w); // 建条单向边
	}
	dijkstra(1);
	if (dis[n][0] == INF)
		cout << "-1" << endl; // 无解
	else cout << dis[n][0] << endl;
	return 0;
}

标签:const,P9751,int,dijkstra,2023,include,nt,CSP,dis
From: https://www.cnblogs.com/thrift/p/18591505

相关文章

  • Trimble Business Center 2023.11(TBC2023.11)地理空间办公软件永久许可
    TrimbleBusinessCenter2023.11TrimbleBusinessCenter(TBC)是一个全面综合并可扩展的工具套件,能够用于各种地理空间业务。无论您的业务需要单机许可还是多用户企业许可,TrimbleBusinessCenter都可以为您提供灵活的选项,以满足您的不同需求。TrimbleBusinessCenter为当......
  • 2001-2023年上市公司数据资本化数据
    2001-2023年上市公司数据资本化数据1、时间:2001-2023年2、来源:上市公司年报3、指标:自用型数据资产数字关键词、自用型数据资产数据关键词、自用型数据资产信息关键词、自用型数据资产网络关键词、交易型数据资产数字关键词、交易型数据资产数据关键词、交易型数据资产信息关......
  • 1999-2023年上市公司人工智能词频统计数据(年报词频统计)
    1999-2023年上市公司人工智能词频统计数据(年报词频统计)1、时间:1999-2023年2、来源:上市公司年报3、指标:股票代码、公司简称、年报标题、年份、行业名称、行业代码、全文-文本总长度、仅中英文-文本总长度、人工智能水平、人工智能-词频和、人工智能、计算机视觉、图像识别、......
  • CSP-S 2024 邮寄
    Day-1:模拟赛考爆了,甚至没有同机房的几个高一学弟高,心情十分悲伤,似乎为我csp-s的爆似埋下了伏笔Day-0.5:从学校多请了半天的假出来散散心,但最后还是找了个地方疯狂背板子作为数据结构人的考前自我欺骗罢了背板子到是比较顺利,几乎所有板子都能一遍过或者十分钟之内调出来,就是......
  • CCF-CSP真题 《201412_2_Z字形扫描》Python思路题解
    题目描述:在图像编码的算法中,需要将一个给定的方形矩阵进行 Z 字形扫描(ZigzagScan)。给定一个 n×n的矩阵,Z字形扫描的过程如下图所示:对于下面的 4×4 的矩阵,1539375694647313对其进行 Z 字形扫描后得到长度为 16 的序列:1539739547......
  • 2023年12月GESPC++二级真题解析
    一、单选题(每题2分,共30分)题目123456789101112131415答案CADDDADCDBCDCBB1.以下不可以做为C++变量的是()。A.FiveStarB.fiveStarC.5StarD.Star5【答案】C【考纲知识点】变量的定义与使用(二级考纲知识点范畴),具体涉及到变量名的命名规则。在C++语言中,变量名有严格......
  • 2023年第六届传智杯程序设计挑战赛初赛
    链接:登录—专业IT笔试面试备考平台_牛客网来源:牛客网 题目描述键盘输入两个字符串,将这两个字符串进行拼接后输出。输入描述:键盘输入两个字符串输出描述:输出两个字符串拼接后的结果示例1输入复制hellonihaohellonihao输出复制hellonihaohellonihaoimport......
  • P9142 [THUPC 2023 初赛] 欺诈游戏 题解
    P9142[THUPC2023初赛]欺诈游戏题面这个游戏名叫《走私游戏》。游戏规则大概是这样的:一名玩家扮演走私者,一名玩家扮演检察官。走私者可以将\(x\)日元(\(x\)为\([0,n]\)内的整数,由走私者决定)秘密放入箱子中,而检查官需要猜测箱子中的金额。假设检察官猜了\(y\)(\(y\)也必......
  • 【工具变量】上市公司企业环保费改税数据(2000-2023年)
    一、测算方式:参考C刊《财政研究》刘晔(2024)老师的做法,利用环保税“税负平移”的基本实施原则构建双重差分模型的政策变量。具体而言,在“费改税”的过程中,部分省份按照“税负平移”将原有的排污费征收标准平移至环保税,另一些则采取了提高征收标准的措施。据此设定政策分组变量Tre......
  • 【工具变量】大气十条”环境政策试点DID(2007-2023年)
    数据简介:《大气污染防治行动计划》是中国针对大气污染问题制定的重要环境规则之一,建立了集中规划、区域分解、政治激励、多措并举和持续调整的空气监管体系,有效改善了中国大部分地区的空气质量。“大气十条”也涵盖了较为全面的污染治理措施,涉及产业结构升级、调整能源结构、发......