洛谷——P1983 [NOIP2013 普及组] 车站分级(拓扑排序、c++)

news2024/11/17 16:26:36

文章目录

  • 一、题目
  • [NOIP2013 普及组] 车站分级
    • 题目背景
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 样例 #2
      • 样例输入 #2
      • 样例输出 #2
    • 提示
  • 二、题解
    • 基本思路:
    • 代码


一、题目

[NOIP2013 普及组] 车站分级

题目背景

NOIP2013 普及组 T4

题目描述

一条单向的铁路线上,依次有编号为 1 , 2 , … , n 1, 2, …, n 1,2,,n 的 $n $ 个火车站。每个火车站都有一个级别,最低为 1 1 1 级。现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车站 x,则始发站、终点站之间所有级别大于等于火车站 x 的都必须停靠。
注意:起始站和终点站自然也算作事先已知需要停靠的站点。

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

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

输入格式

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

i + 1 i + 1 i+1 ( 1 ≤ i ≤ m ) (1 ≤ i ≤ m) (1im) 中,首先是一个正整数 s i   ( 2 ≤ s i ≤ n ) s_i\ (2 ≤ s_i ≤ n) si (2sin),表示第 $ i$ 趟车次有 s i s_i si 个停靠站;接下来有 $ s_i$ 个正整数,表示所有停靠站的编号,从小到大排列。每两个数之间用一个空格隔开。输入保证所有的车次都满足要求。

输出格式

一个正整数,即 n n n 个火车站最少划分的级别数。

样例 #1

样例输入 #1

9 2 
4 1 3 5 6 
3 3 5 6

样例输出 #1

2

样例 #2

样例输入 #2

9 3 
4 1 3 5 6 
3 3 5 6 
3 1 5 9

样例输出 #2

3

提示

对于 $ 20%$ 的数据, 1 ≤ n , m ≤ 10 1 ≤ n, m ≤ 10 1n,m10

对于 50 % 50\% 50% 的数据, 1 ≤ n , m ≤ 100 1 ≤ n, m ≤ 100 1n,m100

对于 100 % 100\% 100% 的数据, 1 ≤ n , m ≤ 1000 1 ≤ n, m ≤ 1000 1n,m1000

二、题解

基本思路:

  • 题目让求n 个火车站最少划分的级别数。如果火车停靠了火车站 x,则始发站、终点站之间所有级别大于等于火车站 x 的都必须停靠。
  • 也就是说不是停靠站的火车站级别必须是比停靠站的级别小的,这就给出了点与点之间的关系。建图完毕后,拓扑排序中取级别较大的即可

代码

#include<bits/stdc++.h>
using namespace std;

#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl "\n"
#define int long long
#define fi first
#define se second
#define repn(i,o,n) for(int i=o;i<=n;i++)
#define rep(i,o,n) for(int i=o;i<n;i++)
const int N = 1010;
int n,m,a[N],rd[N];
vector<int> edge[N];//存图 
bool b[N],vis[N][N];//标记哪些是停靠站、是否已有边 

queue<pair<int,int>> q; //车站编号、级别 
inline void TopoSort(){
	int res=0;//记录级别最大的即为答案 
	repn(i,1,n)
	  if(!rd[i]) q.push({i,1});//入度为0的,最低级的入队 
	while(!q.empty()){
		auto x=q.front();
		q.pop()	;
		//cout<<x.fi<<' '<<x.se<<endl;
		for(auto y:edge[x.fi])
		  if(--rd[y]==0){
		  	q.push({y,x.se+1});
		  	res=max (res,x.se+1);//取级别较大的 
		  }
	}
	cout<<res<<endl;
}

void solve() {
	cin>>n>>m;
	//建图 
	repn(i,1,m){
		memset(b,false,sizeof(b));
		int len;
		cin>>len;
		repn(j,1,len)
		  cin>>a[j],b[a[j]]=true;
		//连边、建图 
		repn(j,a[1],a[len]){//从a[1](起始站)到a[len](终点站) 
			if(b[j]) continue;//是停靠站
			repn(k,1,len){//len个停靠站 
				if(vis[j][a[k]]) continue;//已有边
				vis[j][a[k]]=true;
				rd[a[k]]++;//该停靠站入度加1 
				edge[j].push_back(a[k]);
			} 
		}
	}
	TopoSort();
}

signed main() {
	//IOS;
	int T=1;
	//cin>>T;
	while(T--) {
		solve();
	}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1359349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

美年大健康黄伟:从选型到迁移,一个月升级核心数据库

核心生产系统的数据库&#xff0c;从接到替换需求到完成分布式升级&#xff0c;需要多久&#xff1f;一个月&#xff0c;这是美年大健康的回答。一个月集中调配各种资源&#xff0c;美年大健康完成了应用程序基本零改造的平滑迁移&#xff0c;新数据库在成本更低的前提下&#…

【Android】自定义View组件,并实现在 Compose、Kotlin、Xml 中调用

从事 Android 开发以来&#xff0c;很少有过自定义 View 的相关开发需求&#xff0c;大部分 UI 都是可以集成某些官方组件&#xff0c;在组件的基础上完成能够大大缩短开发时间。但今天我要讲的是&#xff1a;如何使用 Android 开发一个Compose、Xml都可以调用的组件&#xff1…

Vue中break关键字

Change() {//每次触发该事件&#xff0c;都要讲data重新赋值一次this.data JSON.parse(JSON.stringify(this.data1));// 根据选中的等级更新数据switch (this.selectedlevel) {case 1:// 更新数据为一级数据this.data this.data.filter(item > item.level "1"…

架构(1)

目录 1.如何理解架构的演进&#xff1f; 2.如何理解架构的服务化趋势&#xff1f; 3.架构中有哪些技术点&#xff1f; 4.谈谈架构中的缓存应用&#xff1f; 5.在开发中缓存具体如何实现&#xff1f; 1.如何理解架构的演进&#xff1f; 初始阶段的网站架构应用服务和数据服…

2024年1月6日 十二生肖 今日运势

小运播报&#xff1a;2024年1月6日&#xff0c;星期六&#xff0c;农历十一月廿五 &#xff08;癸卯年乙丑月己巳日&#xff09;&#xff0c;法定节假日。 红榜生肖&#xff1a;牛、猴、鸡 需要注意&#xff1a;鼠、虎、猪 喜神方位&#xff1a;东北方 财神方位&#xff1a…

【2024最新版】Win11基础配置操作(磁盘分区、修改各种默认存储位置、安装软件操作)【释放C盘空间】

文章目录 一、硬盘分区0. 磁盘管理1. 压缩卷2. 新建简单卷向导 二、修改默认存储位置1. 保持新内容的地方a. 位置b. 操作 2. 快速访问六件套a. 位置b. 操作 三、安装软件0. 应用商店设置a. 设置中心b. 修改下载设置 1. 微信电脑版设置a. 下载b. 安装c. 聊天记录迁移与备份d. 存…

MySQL-DCL

DCL是数据控制语言&#xff0c;用来管理数据库用户&#xff0c;控制数据库的访问权限。 管理用户&#xff1a;管理哪些用户可以访问哪些数据库 1.查询用户 USE mysql; SELECT * FROM user; 注意&#xff1a; MySQL中用户信息和用户的权限信息都是记录在mysql数据库的user表中的…

Vue入门一(前端发展史|Vue介绍|Vue插值语法|Vue指令|style与class使用|条件渲染)

文章目录 一、前端的发展史二、Vue介绍 和 基本使用1) Vue介绍2) Vue特点3) M-V-VM思想1.MVVM介绍2.MVVM的特性3.MVVM逻辑 4) 组件化开发、单页面开发组件化开发单页面开发 5) 引入方式6) 补充解释型的语言是需要解释器的 nodejs&#xff1a;一门后端语言7) 快速使用 三、Vue之…

力扣1944.队列中可以看到的人数--单调栈

思路&#xff1a; 由题知一个人能 看到 他右边另一个人的条件是这两人之间的所有人都比他们两人 矮 &#xff0c;也就是说&#xff0c;在自己右边第一个比自己高的人后面的人就肯定看不到了那么只需要找到右边第一个比自己高的人与自己之间的所有满足要求的人就行了&#xff0…

PyTorch|一次画一批图像

想想这样一个场景&#xff0c;我们训练了一个神经网络&#xff0c;输入一些信息&#xff0c;这个网络可以根据信息为我们生成相关图片。 这些图片并不是一张&#xff0c;而是多张&#xff0c;我们想把这些图片一次全部显示出来&#xff0c;而不是一张一张的显示&#xff08;这…

CSS 缩小旋转动画

<template><div class="container" @mouseenter="startAnimation" @mouseleave="stopAnimation"><!-- 旋方块 --><div class="box" :class="{ rotate-scale-down: isAnimating }"><!-- 元素内容…

Linux 进程(十) 进程替换

用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec*函数以执行另一个程序。当进程调用一种exec*函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec*并不创建新进程,所以调用exec*前…

stable diffusion 人物高级提示词(四)朝向、画面范围、远近、焦距、机位、拍摄角度

一、朝向 英文中文front view正面Profile view / from side侧面half-front view半正面Back view背面(quarter front view:1.5)四分之一正面 prompt/英文中文翻译looking at the camera看向镜头facing the camera面对镜头turned towards the camera转向镜头looking away from …

c语言题目之统计二级制数中1的个数

文章目录 题目一、方法1二、方法2三&#xff0c;方法3总结 题目 统计二进制数中1的个数 输入一行&#xff0c;输出一行 输入&#xff1a; 输入一个整数 输出&#xff1a; 输出存储在内存中二进制的1的个数 一、方法1 之前的文章中&#xff0c;小编写了有关于内存在二进制中的存…

基于YOLOv7算法的高精度实时安全背心目标检测识别系统(PyTorch+Pyside6+YOLOv7)

摘要&#xff1a;基于YOLOv7算法的高精度实时安全背心目标检测系统可用于日常生活中检测与定位安全背心&#xff0c;此系统可完成对输入图片、视频、文件夹以及摄像头方式的目标检测与识别&#xff0c;同时本系统还支持检测结果可视化与导出。本系统采用YOLOv7目标检测算法来训…

flutter 五:MaterialApp

MaterialApp const MaterialApp({super.key,this.navigatorKey, //导航键this.scaffoldMessengerKey, //scaffold管理this.home, //首页Map<String, WidgetBuilder> this.routes const <String, WidgetBuilder>{}, //路由this.initialRoute, //初始路由th…

四种“栈溢出检测方法”实现分析(2种纯软件、一种纯硬件、一种软硬件结合)

1、两种纯软件的栈溢出检测方法 参考博客&#xff1a;《freeRTOS的栈溢出检测机制》&#xff1b; 2、纯硬件&#xff1a;使用栈限制寄存器 2.1、工作逻辑分析 前提条件&#xff1a;使用满减栈硬件上提供栈限制寄存器&#xff08;用SP_limit表示&#xff09;&#xff0c;可以…

互联网广告行业发展历程

在20年的历程中&#xff0c;广告主与媒体方持续面对着一些问题&#xff0c;一些核心问题推动了行业的迭代。 互联网广告经过了20年左右的高速发展&#xff0c;已愈发成熟&#xff0c;其历程是有趣的。 对互联网广告发展的理解&#xff0c;网上的文章并不多&#xff0c;已有的…

AIGC初探:提示工程 Prompt Engineering

简介 提升工程是什么 提示工程&#xff08;Prompt Engineering&#xff09;是人工智能领域中的一个概念&#xff0c;特别是在自然语言处理&#xff08;NLP&#xff09;领域中。它是一种通过设计和优化输入提示来提高AI模型表现的方法。 对于基于转换器的大型语言模型&#x…

无监督学习(K-Means)的认识

目录 一、无监督学习 二、无监督学习和有监督学习的区别 三、K-Means 3.1数据分析 3.2k-meas算法 3.3数据正态化后k-means 3.4找最佳k&#xff08;Elbow Plot&#xff09; 四、k-means算法的优缺点 一、无监督学习 无监督学习是一种机器学习的方法&#xff0c;…