题目描述

一条单向的铁路线上,依次有编号为 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

9 2
4 1 3 5 6
3 3 5 6

输出 #1

2

输入 #2

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

输出 #2

3

说明/提示

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

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

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

分析

题目中说,如果这趟车次停靠了火车站 x,则始发站、终点站之间所有级别大于等于火车站 x 的都必须停靠。也就是说,这趟车次经过且不停靠的所有车站的级别都必须小于这趟车次停靠的所有车站的级别。
可以确定他们之间的大小关系,停靠点站与不停靠的站连一条单向边,然后加入拓扑排序得出合法的他们之间的关系。

上代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;int n,m,x,ans,a[1001][1001],v[1001],in[1001],h,t,q[1001],f[1001],b[1001];void topsort()
{memset(v,0,sizeof(v));for(int i=1;i<=n;i++){if(in[i]==0)//找到一个入度为0的边 {t++;q[t]=i;f[i]=1;v[i]=1;}}while(h<t){h++;for(int i=1;i<=n;i++){if(a[q[h]][i]==1&&v[i]==0){in[i]--;if(in[i]==0){f[i]=f[q[h]]+1;ans=max(ans,f[i]);v[i]=1;t++;q[t]=i;}}}}
}int main()
{cin>>n>>m;for(int i=1;i<=m;i++){cin>>x;memset(v,0,sizeof(v));for(int j=1;j<=x;j++){cin>>b[j];v[b[j]]=1;}for(int j=b[1];j<=b[x];j++){if(v[j]==0){for(int k=1;k<=x;k++){if(a[j][b[k]]==0){in[b[k]]++;//入度++a[j][b[k]]=1;//建边 }}}}}topsort();cout<<ans; return 0;
}

【洛谷P1983】车站分级【拓扑排序】相关推荐

  1. 洛谷P1983 车站分级 拓扑排序

    题目链接:https://www.luogu.com.cn/problem/P1983 此题是用拓扑排序求层数,将等级高的点连向等级的点,连成的图用拓扑排序看一下多少层,即答案. 代码如下 #incl ...

  2. 洛谷P1983 车站分级(图的建立)

    题目描述 一条单向的铁路线上,依次有编号为 1, 2, -, n的 n个火车站.每个火车站都有一个级别,最低为 1 级.现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车站  ...

  3. 洛谷 P1983 车站分级(拓扑排序)

    https://www.luogu.com.cn/problem/P1983 思路 对于每一趟车,将其经过的车站中,停靠的和不停靠的连一条边,注意边的去重,要双向标记,不然有个点会超时,这样拓扑排序递 ...

  4. 洛谷P1983 车站分级(拓扑排序)

    [题目描述] 一条单向的铁路线上,依次有编号为 1 , 2 , - , n 1,2,\dots ,n 1,2,-,n的 n n n个火车站.每个火车站都有一个级别,最低为 1 1 1级.现有若干趟车次 ...

  5. 洛谷 P1983 车站分级

    嗯... 听说这是一道存图+拓扑排序的题,但是看了一晚上好像只看出存图来.... 自己太蒟蒻,然后没办法,就.....就借用了Mr Kevin的代码和思路,然后自己做了一些了解... (并且现在自己对 ...

  6. 洛谷 P1983 车站分级

    题目描述 一条单向的铁路线上,依次有编号为 1, 2, -, n 的 n 个火车站.每个火车站都有一个级 别,最低为 1 级.现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车 次停靠了 ...

  7. 洛谷P1983 车站分级

    这题有三种做法 1.O(nm2)1.O(nm2)1.O(nm^2) 488ms / 9.61MB / 0.68KB 不用讲,直接贴代码 #include<bits/stdc++.h> us ...

  8. P1983 [NOIP2013 普及组] 车站分级——拓扑排序+dp

    [NOIP2013 普及组] 车站分级 题目描述 一条单向的铁路线上,依次有编号为 $1, 2, -, n $的 $n $个火车站.每个火车站都有一个级别,最低为 111 级.现有若干趟车次在这条线路 ...

  9. P3387 【模板】缩点 洛谷 java题解 连通图+拓扑排序

    传送门: P3387 [模板]缩点 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P3387 问题分析 首先为了节省 ...

  10. 洛谷 1983 车站分级

    题目描述 一条单向的铁路线上,依次有编号为 1, 2, -, n 的 n 个火车站.每个火车站都有一个级别,最低为 1 级.现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车 ...

最新文章

  1. springboot打包时加入本地jar打包
  2. Code Runner for VS Code 突破 2000 万下载量!支持超过 50 种语言
  3. android inset 标签,android – 有几个WindowInsets?
  4. cobbler api接口开发测试实例
  5. ssh 多台服务器之间连接(linux)
  6. 烂泥:nagios监控单网卡双IP
  7. ajxa TypeError: $.ajax is not a function
  8. ExtJs教程----如何改变各个区域的背景色
  9. 在Vmplayer中自定义桥接网络(Bridged Network)的配置
  10. mybatis查询出现索引越界异常
  11. vue3如何使用svg图片
  12. SQLServer数据库密码已过期问题 处理
  13. 【bzoj 1022】 小约翰的游戏John 【SHOI2008】
  14. mysql数据库搭建动态网站_数据库和动态网页怎么建立联系
  15. 一分钟学会如何给图片降噪,给图片降噪也可以很简单!
  16. 【北京站】技术沙龙第19期:千万日活量级 iOS 应用背后的技术
  17. 一.PHP基础知识相关面试题
  18. Firefly AIO-3399ProC开发板与PC端部署Qt5.12.2交叉编译环境
  19. 银河麒麟批量压缩图片的方法
  20. c语言 operator,C语言讲义——运算符(operator)

热门文章

  1. 原码,反码,补码,阶码,移码是什么?有什么区别(讨论机器数的表示)
  2. 在电脑上不能打开phpMyAdmin:即网址http://localhost:8080/phpMyAdmin/解决方法如下----潘万丁
  3. java实训扫雷小程序设计项目_扫雷小程序!Java的
  4. 使图片按比例充满盒子
  5. html如何设置视频不能拖动,video标签播放视频不能拖动进度条(示例代码)
  6. 系统重装后OA服务器,华为服务器重装系统
  7. 实战技术:从王者荣耀聊聊游戏的帧同步
  8. JavaScript事件绑定,jQuery类库
  9. 分布式共识的工作原理,Part-2:共识问题与 FLP 不可能定理
  10. 矩形脉冲用matlab,矩形周期脉冲信号MATLAB实现.doc