456. 车站分级

2023-10-19 00:10
文章标签 车站 分级 456

本文主要是介绍456. 车站分级,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一条单向的铁路线上,依次有编号为 1, 2, …, n 的 nn 个火车站。

每个火车站都有一个级别,最低为 1 级。

现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车站 x,则始发站、终点站之间所有级别大于等于火车站 x 的都必须停靠。(注意:起始站和终点站自然也算作事先已知需要停靠的站点)

例如,下表是 5 趟车次的运行情况。

其中,前 4 趟车次均满足要求,而第 5 趟车次由于停靠了 3 号火车站(2 级)却未停靠途经的 6 号火车站(亦为 2 级)而不满足要求。

1163900-20170818013814084-1540659827.jpg

现有 m 趟车次的运行情况(全部满足要求),试推算这 n 个火车站至少分为几个不同的级别。

输入格式

第一行包含 2 个正整数n,m,用一个空格隔开。

第 i+1 行(1≤i≤m)中,首先是一个正整数si(2≤si≤n),表示第 i 趟车次有 si 个停靠站;接下来有 si 个正整数,表示所有停靠站的编号,从小到大排列。

每两个数之间用一个空格隔开。输入保证所有的车次都满足要求。

输出格式

输出只有一行,包含一个正整数,即 n 个火车站最少划分的级别数。

数据范围

1≤n,m≤1000

输入样例:
9 3 
4 1 3 5 6 
3 3 5 6 
3 1 5 9 
输出样例:
3
思路:
/*
题目描述:如果这趟车次停靠了火车站x,则始发站、终点站之间所有级别大于等于火车站x的都必须停靠翻译过来:停靠过的车站的等级一定严格大于为停靠过的车站的等级,因此车站的等级均有严格的大小关系,则不存在环,因此可以用拓扑排序每个车站在图中的大小关系,使用动态规划求出车站等级最大的最小值(方法和 Acwing 1192奖金 类似)在建边的时候,最坏情况下是有1000趟火车,每趟有1000个点,每趟上限有500个点停站,则有(1000 - 500)个点不停站,不停站的点都向停站的点连有向边,则总共有500 * 500 * 1000 = 2.5 * 10^8,则会超内存,如果用邻接矩阵存储,需要遍历所有的边,遍历的次数也是2.5 * 10^8,因此会超时,所以在每趟火车所有不停站的点向所有停站的点连有向边时,中间添加一个ver辅助结点,如下图连接方式dist[i]:表示i点在拓扑图中离起点的最远距离(可能存在多起点),dist[起点] == 1,边的权值为1
*/

f6737d8847fd3f4dbbd98bd14e3a370.png

代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 2010, M = 1000010; // N 边数+站点数  M 车辆数*每辆车最多边数int n, m;
int h[N], e[M], ne[M], w[M], idx;
int q[N], d[N];
int dist[N];
bool st[N];void add(int a, int b, int c)
{e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;d[b]++;
}void topsort()
{int hh = 0, tt = -1;for (int i = 1; i <= n + m; i++)if (!d[i])q[++tt] = i;while (hh <= tt){int t = q[hh++];for (int i = h[t]; ~i; i = ne[i]){int j = e[i];if (--d[j] == 0)q[++tt] = j;}}
}int main()
{scanf("%d%d", &n, &m);memset(h, -1, sizeof h);for (int i = 1; i <= m; i++){memset(st, 0, sizeof st);int cnt;scanf("%d", &cnt);int start = n, end = 1;while (cnt--){int stop;scanf("%d", &stop);start = min(start, stop);end = max(end, stop);st[stop] = true;}int ver = n + i;for (int j = start; j <= end; j++) // 存储边的优化if (!st[j])add(j, ver, 0);elseadd(ver, j, 1);}topsort();for (int i = 1; i <= n; i++)dist[i] = 1;for (int i = 0; i < n + m; i++) // 求最长路径{int j = q[i];for (int k = h[j]; ~k; k = ne[k])dist[e[k]] = max(dist[e[k]], dist[j] + w[k]);}int res = 0;for (int i = 1; i <= n; i++)res = max(res, dist[i]);printf("%d\n", res);return 0;
}

这篇关于456. 车站分级的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/235994

相关文章

安科瑞ASJ漏电流继电器在轨道交通地铁车站配电系统中的应用

应用背景 城市轨道交通设备门类复杂、数量庞大、分布广泛,在长期连续运行时存在火灾隐患。在国内外的地铁火灾中,因电气原因引起的火灾占比最大,达到37%,其中供电线路的漏电流更是造成电气火灾的重要因素。消防部门、行业专家往往要求地铁车站设置电气火灾监控系统,但在地铁监控防范措施中,泄漏电流的监测并不完善,现有的泄漏电流监测系统存在误报现象,使得配电系统漏电保护 频繁跳闸。为此,查找频繁误报警原因,采

NYOJ 456 邮票分你一半

OJ题目 : http://acm.nyist.net/JudgeOnline/problem.php?pid=456 描述 小珂最近收集了些邮票,他想把其中的一些给他的好朋友小明。每张邮票上都有分值,他们想把这些邮票分成两份,并且使这两份邮票的分值和相差最小(就是小珂得到的邮票分值和与小明的差值最小),现在每张邮票的分值已经知道了,他们已经分好了,你知道最后他们得到的邮票分值和相差多少吗?

内蒙古土壤各种养分含量标准分级表

内蒙古地区的土壤类型复杂多样,涵盖草原、荒漠、森林等不同生态系统,土壤养分含量因气候和地域差异较大。因此,内蒙古地区土壤养分含量的标准分级主要根据当地的土壤特性进行划分。以下是根据常见的内蒙古地区土壤类型(如草原土、黑土、沙土等)给出的养分含量标准分级表: 1. 全氮含量标准(g/kg) 等级草原土森林土沙质土极低< 0.3< 0.5< 0.2低0.3 - 0.60.5 - 0.80.2 -

【软件测试】软件测试-----什么是Bug?Bug是如何分级的?Bug的生命周期是怎样的?如何描述一个Bug?

博客目录 一.软件测试的生命周期二.BUG的定义和级别2.1 bug的概念.2.2 如何描述一个bug.2.3bug的级别2.3.1 bug分级的意义.2.3.2 bug的四种级别. 三.BUG的生命周期.四.当与开发人员发生冲突该如何处理(高频面试)五.总结 一.软件测试的生命周期 软件测试贯穿于软件的整个生命周期,针对这句话我们一起来看一下软件测试是如何贯穿软件的整个生命周

数据结构--初步了解(抽象分级)

本文探讨了数据结构和算法在常规开发中的重要性。数据结构如ArrayList用于构建无穷级菜单,线性结构则常用于好友管理。理解数据的逻辑和存储结构、算法的正确性、鲁棒性、简单性、抽象分级和高效性是关键。算法的描述方式包括汉字、流程图、伪代码和实际实现,并通过时间复杂度和空间复杂度评估其效率。在实际应用中,应关注数据结构的合理使用和算法的设计优化。 摘要由CSDN通过智能技术生成 展开  现状:现在

Java 多线程初探索之模拟车站多窗口售票

欢迎各路大神批评指正 ---------------------------------->分割线<--------------------------------- 阅读之前,你应该了解: 1.java多线程的两种写法 2.线程变量 3.Java线程工作内存与主内存变量交换过程 思考:模拟一个车站多窗口售票程序,必须满足以下条件:(1)必须多个窗口进行售票(2)票不可多卖,比如

MATLAB水果分级系统

课题介绍 现在商业行为中,在水果出厂前都需要进行质量检测,需要将不同等级的水果进行分级包装,以保证商业利益最大化。可是传统方法都是依靠人工进行检测,效率低下,主观成分大,并不能很好客观地评价出货质量,导致工厂损失利益,增加客户投诉,从而造成品牌效率损失,造成隐形的损失。     该课题为基于MATLAB的水果分级系统。适用圆形水果,如苹果,橘子,柚子,柿子等,统计水果图片的面积,圆形度和色

为数据安全护航,袋鼠云在数据分类分级上的探索实践

在大数据时代,数据具有多源异构的特性,且价值各异,企业需依据数据的重要性、价值指数等予以区分,以利采取不同的数据保护举措,避免数据泄露。故而,数据分类分级管理属于数据安全保护中极为重要的环节之一。 什么是数据分类分级? 从业务角度或数据管理的方向来考量数据分类,涵盖行业维度、业务领域维度、数据来源维度、共享维度、数据开放维度等等。与此同时,依据这些维度,把具有相同属性或特征的数据,按照特定的原

数据资产入表-数据分类分级标准-数据分级

前情提要:2021年9月1日,《中华人民共和国数据安全法》正式施行,明确规定“国家建立数据分类分级保护制度”,数据分级分类是数据安全管理的重要措施,它涉及到对数据资产的识别、分类和定级,是保障数据合规的前提。      数据分类:根据数据的属性或特征,按照一定的原则和方法进行区分和归类的过程,目的是为了更好地管理和使用数据。      数据分级:根据数据的敏感程度和遭到篡改、破坏

实验室仪器校准中,砝码是怎么分级的?这些级别有什么意义?

砝码在计量中,是一种标准件,一般我们只是作为协助校准的辅助工具使用,但是砝码本身也是一种计量器具,也可以被单独校准检测,在砝码的精确度上,其实也有明确分级,并且这些级别也都具备自身的计量含义,那么实验室仪器校准中,砝码是怎么分级的?这些级别有什么意义? 正常的情况下,校准环节中至少会用到一个砝码,且该砝码不会超过天平计量范围的最大值,多数是接近最大计量重量。而如果是进行线性校准,则至少会用到