NOIP2013 车站分级

2023-05-16

描述

一条单向的铁路线上,依次有编号为 1, 2, ..., n 的 n 个火车站。每个火车站都有一个级别,最低为 1 级。现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车站 x,则始发站、终点站之间所有级别大于等于火车站 x 的都必须停靠。
(注意:起始站和终点站自然也算作事先已知需要停靠的站点)
例如,下表是 5 趟车次的运行情况。其中,前 4 趟车次均满足要求,而第 5 趟车次由于停靠了 3 号火车站(2 级)却未停靠途经的 6 号火车站(亦为 2 级)而不满足要求。

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

格式

输入格式

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

输出格式

输出只有一行,包含一个正整数,即 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
  

限制

每个测试点1s。

提示

对于 20%的数据,1 ≤ n, m ≤ 10;
对于 50%的数据,1 ≤ n, m ≤ 100;
对于 100%的数据,1 ≤ n, m ≤ 1000

 
简单的拓扑排序,我居然看了一天。。。

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 
 5 const int MAXN=1000+10;
 6 int n,m,ans=0;
 7 int B[MAXN]={0},R[MAXN]={0},SK[MAXN]={0};
 8 bool A[MAXN]={0},F[MAXN]={0},E[MAXN][MAXN]={0};
 9 
10 int main()
11 {
12     cin>>n>>m;
13     for(int i=1;i<=m;i++)
14     {
15         int s;
16         memset(A,0,sizeof(A));
17         cin>>s;
18         for(int j=1;j<=s;j++)
19         {
20             cin>>B[j];
21             A[B[j]]=1;
22         }
23         for(int j=B[1];j<=B[s];j++)
24             if(!A[j])
25                 for(int k=1;k<=s;k++)
26                     if(!E[j][B[k]])
27                     {
28                         E[j][B[k]]=1;
29                         R[B[k]]++;
30                     }
31     }
32     int top;
33     while(1)
34     {
35         top=0;
36         for(int i=1;i<=n;i++)
37             if(!R[i]&&!F[i])
38             {
39                 SK[++top]=i;
40                 F[i]=1;
41             }
42         if(top==0)break;
43         for(int i=1;i<=top;i++)
44             for(int j=1;j<=n;j++)
45                 if(E[SK[i]][j])
46                 {
47                     E[SK[i]][j]=0;
48                     R[j]--;
49                 }
50         ans++;
51     }
52     cout<<ans<<endl;
53     return 0;
54 }  

 

新模板get√


 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 
 6 struct Edge
 7 {
 8     int to,next;
 9 }E[1000001];
10 int head[100001],r[100001],s[100001];
11 bool f[100001];
12 int node=0;
13 
14 int n,m,ans;
15 
16 void insert(int u,int v)
17 {
18     E[++node]=(Edge){v,head[u]};
19     head[u]=node;
20     r[v]++;
21 }
22 
23 void topsort()
24 {
25     int top;
26     while(1)
27     {
28         top=0;
29         for(int i=1;i<=n;i++)
30             if(!r[i]&&!f[i])
31                 s[++top]=i,f[i]=1;
32         if(top==0) break;
33         for(int i=1;i<=top;i++)
34             for(int j=head[s[i]];j;j=E[j].next)
35                 r[E[j].to]--;
36         ans++;
37     }
38 }
39 
40 int read()
41 {
42     int x=0,f=1;char ch=getchar();
43     while(ch<'0'||ch>'9'){if(ch=='-')f=-f;ch=getchar();}
44     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
45     return x*f;
46 }
47 
48 int B[1010];
49 bool A[1010],e[1010][1010];
50 
51 int main()
52 {
53     n=read();m=read();
54     for(int i=1;i<=m;i++)
55     {
56         int s=read();
57         memset(A,0,sizeof(A));
58         for(int j=1;j<=s;j++)
59         {
60             B[j]=read();
61             A[B[j]]=1;
62         }
63         for(int j=B[1];j<=B[s];j++)
64             if(!A[j])
65                 for(int k=1;k<=s;k++)
66                     if(!e[j][B[k]])
67                     {
68                         e[j][B[k]]=1;
69                         insert(j,B[k]);
70                     }
71     }
72     topsort();
73     cout<<ans<<endl;
74     return 0;
75 }  

 

转载于:https://www.cnblogs.com/InWILL/p/5862011.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NOIP2013 车站分级 的相关文章

随机推荐

  • linux系统 常用命令(全面总结)

    文章目录 1 Linux 之 文件目录 工作机制2 Linux命令 之 文件目录管理2 1 目录管理2 1 1 cd2 1 2 ls2 1 3 pwd2 1 4 mkdir2 1 5 rmdir2 1 6 tree 需要安装 2 2 文件管
  • ElasticSearch 8 学习笔记总结(五)

    文章目录 一 ElasticSearch 8 版本二 ES8 集群 环境安装1 生成安全证书2 生成http证书3 配置第一个节点4 配置其他节点 三 ES集群 关联问题解决四 Kibana 安装和使用五 kibana 基础操作1 索引操作
  • ElasticSearch 8 学习笔记总结(六)

    文章目录 一 ES8 的Java API 环境准备二 ES8 的Java API 索引操作三 ES8 的Java API 文档操作1 文档的 插入 批量插入 删除等操作2 文档的查询 四 异步客户端操作 一 ES8 的Java API 环境
  • ElasticSearch 8 学习笔记总结(七)

    感觉这些东西没必要认真学 xff0c 了解一下 xff0c 工作用到再学 文章目录 一 ES8 EQL 介绍二 ES8 EQL基本操作 与 安全检测三 ES SQL操作四 ES SQL与DSL的关系五 ES 常用的SQL操作六 ES dat
  • 6大热门开源自动化测试框架【建议收藏】

    如果您正在考虑构建自己的测试自动化框架 xff0c 请在自荐之前 xff0c 参考一下以下的六大热门自动化测试框架 在大多数情况下 xff0c 您将会很好地考虑一个或多个可用的开放源代码选项 这是因为一般来说 xff0c 框架是可以在团队中
  • Docker从入门到进阶之进阶操作(6) —— 【在docker上运行gitlab】

    上一章节讲了使用docker来做nginx的负载均衡 xff0c 这一章节讲 在docker上运行gitlab 在本章节中 xff0c 将为您演示如何在docker上运行gitlab GitLab 是一个用于仓库管理系统的开源项目 xff0
  • VSCode使用技巧(二)——调整终端控制台字体大小

    近期使用vs code来链接服务器进行日常工作 xff0c 但是在使用vs code中的 34 终端 34 控制台来对代码进行操作时 xff0c 终端 控制台的字体较小 xff0c 看起来非常不舒服 xff0c 如下图所示 xff1a 使用
  • CentOS-7 下 GitLab 安装部署教程

    CentOS 7 下 GitLab 安装部署教程 前言主要内容GitLab 介绍本篇环境信息 准备工作配置清华大学镜像仓库安装基础依赖安装 Postfix开放 ssh 以及 http 服务 xff08 80 端口 xff09 部署过程1 Y
  • 2020 CCF 非专业级别软件能力认证第一轮(CSP-S) 提高级 C++ 语言试题

    目录 一 选择题 xff1a 每题 2 分 xff0c 共 15 题 xff0c 30 分 在每小题给出的四个选项中 xff0c 只有一项是符合题目要求的 二 阅读程序 程序输入不超过数组或字符串定义的范围 xff1b 判断题正确填 3 x
  • 最小生成树算法总结【洛谷P3366】

    一 Prim算法 Prim算法是一种以点集为出发点的最小生成树算法 xff0c 它将无向图G中所有顶点V分成两个子集A B 初始时 xff0c A中只包含一个随机选取的顶点u xff0c 其余顶点属于集合B 每次从集合B中选取一个顶点加入顶
  • Linux下出现Read-only file system解决办法

    问题描述 涉及到修改 保存条目等需要写磁盘操作的命令都无法使用 xff08 如tar cp mv rm chmod chown wget下载等指令 xff09 xff0c 总是提示Read only file system xff0c 也就
  • Spring Boot整合Mybatis Plus和PageHelper插件实现分页查询

    简述 xff1a Spring Boot整合Mybatis Plus PageHelper插件实现分页查询功能 环境 xff1a DB Postgre SQL 插件 1 Mybatis Plus 2 PageHelper Maven依赖 x
  • 快速幂、快速幂取模的分析与代码实现

    写在前面 在网上搜了相关内容 xff0c 感觉写的都不是特别详细 xff0c 也没有人讲 xff0c 只能自己理解了 下面会写一下这3个算法的分析与实现 当然都是基于自己的理解 因为博主搜了很多博客都是没有详细的解释 xff0c 数学渣一脸
  • MATLAB fprintf/fscanf矩阵原样输出/读入方法

    fprintf原样输出 a 61 1 2 3 4 5 6 7 8 9 fid 61 fopen 39 d Matlab R2014a project 1 txt 39 39 w 39 fprintf fid 39 d d d n 39 a
  • usr/bin/ld: cannot find 错误解决方法

    文章出处 xff1a http blog csdn net osoon archive 2010 04 25 5526455 aspx 通常在软件编译时出现的usr bin ld cannot find lxxx的错误 xff0c 主要的原
  • Python3中的字典

    目录 1 xff1a 字典的定义及特性 2 xff1a 常用字典字面量及操作 2 1常用字典字面量及操作汇总 2 3字典的增删改查 2 3 1 xff1a 字典的增加操作 2 3 2 xff1a 字典的删除操作 2 3 3 xff1a 字典
  • 如何在Debian 8上添加和删除用户

    介绍 您应该知道如何在一个新鲜的Linux服务器上执行的最基本的任务之一是添加和删除用户 当您创建一个新的系统 xff0c 你往往只能给出默认root 帐户 虽然运行在root 用户提供了大量的功能和灵活性 xff0c 这也是危险的 xff
  • ubuntu20.04 黑屏/紫屏后的处理办法

    系统 xff1a ubuntu20 04 nvidia显卡 xff0c 已设置禁用集成显卡现象 xff1a 重新装显卡 或 wps 43 搜狗输入法 卡死等造成死机后重启 等原因造成登陆后黑屏或紫屏 xff0c 只剩下一个鼠标 xff0c
  • pacman更换中国源

    网上说有直接在 etc pacman conf中更改的 xff0c 但是实际上非常麻烦 xff0c 需要修改key还要导入信任 在终端输入 pacman mirrors c China 即可换成国内镜像 原有的被保存在 var lib pa
  • NOIP2013 车站分级

    描述 一条单向的铁路线上 依次有编号为 1 2 n 的 n 个火车站 每个火车站都有一个级别 最低为 1 级 现有若干趟车次在这条线路上行驶 每一趟都满足如下要求 如果这趟车次停靠了火车站 x 则始发站 终点站之间所有级别大于等于火车站 x