题目链接

题目

题目描述

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

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

车站编号 1 2 3 4 5 6 7 8 9
车次/车站级别 3 1 2 1 3 2 1 1 3
1
2
3
4
5

输入描述

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

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

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

输出描述

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

示例1

输入

9 2
4 1 3 5 6
3 3 5 6

输出

2

示例2

输入

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

输出

3

备注

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

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

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

题解

知识点:图论建模,拓扑排序。

容易知道一条线路范围内的所有车站的级别关系,停靠站级别一定大于不停靠站。因此可以用一个虚拟点来模拟每条线路得到站点的大小关系,级别大的建一条边指向这个点,级别小的从这个点出发建一条边指向自己。用这个图拓扑排序,求排序的最大深度,即站点需要分为几个级别。需要注意的是,每层中间夹着虚拟点,如果深度从 \(0\) 开始计算,那么最后实际深度应该是 \(\lfloor \frac{dep}{2} \rfloor + 1\) 。

时间复杂度 \(O(n+m+\sum s_i)\)

空间复杂度 \(O(n+m+\sum s_i)\)

代码

#include <bits/stdc++.h>
#define ll long long using namespace std; const int N = 1007 << 1, M = 1007 * 1007; int n, m; struct edge {
int v, nxt;
}e[M];
int h[N], idx;
void add(int u, int v) {
e[++idx] = { v,h[u] };
h[u] = idx;
} int deg[N], dep[N];
queue<int> q;
void toposort() {
for (int i = 1;i <= n + m;i++) if (!deg[i]) q.push(i), dep[i] = 0;
while (!q.empty()) {
int u = q.front();
q.pop();
for (int i = h[u];i;i = e[i].nxt) {
int v = e[i].v;
dep[v] = dep[u] + 1;
deg[v]--;
if (!deg[v]) q.push(v);
}
}
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n >> m;
for (int i = 1;i <= m;i++) {
int s;
cin >> s;
vector<int> vis;
for (int j = 1;j <= s;j++) {
int u;
cin >> u;
vis.push_back(u);
}
for (int j = vis.front(), k = 0;j <= vis.back();j++) {
if (j == vis[k]) {
add(n + i, j);
deg[j]++;
k++;
}
else {
add(j, n + i);
deg[n + i]++;
}
}
}
toposort();
cout << *max_element(dep + 1, dep + n + m + 1) / 2 + 1 << '\n';///每个级别夹着一个站点,且深度从0计算
return 0;
}

NC16541 [NOIP2013]车站分级的更多相关文章

  1. NOIp2013 车站分级 【拓扑排序】By cellur925

    题目传送门 我们注意到,题目中说:如果这趟车次停靠了火车站 x,则始发站.终点站之间所有级别大于等于火车站x的都必须停靠.有阶级关系,满满的拓扑排序氛围.但是,如果我们按大于等于的关系连,等于的情况就 ...

  2. [NOIP2013]车站分级 解题报告

    妈蛋这道普及组水(神)题搞了我非常久. 一. 首先一个非常显然的事情就是每一个火车告诉了站与站之间的等级关系,所以拓扑求最长路. 可是发现暴力建边的话最坏能够达到500*500,所以时间复杂度有O(M ...

  3. noip2013 车站分级

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

  4. 题解【洛谷P1983】[NOIP2013]车站分级

    题面 题解 不难想到拓扑排序 于是每一个等级高的向等级低的连一条边 考虑拓扑排序过程中的分层 对于每个点进行分层 于是答案就是这些点中的最大层数 然后就会RE 发现我们多连了一些重复的边 用一个标记数 ...

  5. 【NOIP2013 普及组】车站分级

    [NOIP2013 普及组]车站分级 一.题目 [NOIP2013 普及组]车站分级 时间限制: 1 Sec  内存限制: 128 MB 提交: 3  解决: 0 [提交][状态][讨论版] 题目描述 ...

  6. 洛谷P1983 车站分级

    P1983 车站分级 297通过 1.1K提交 题目提供者该用户不存在 标签图论贪心NOIp普及组2013 难度普及/提高- 提交该题 讨论 题解 记录 最新讨论 求帮忙指出问题! 我这么和(diao ...

  7. 【洛谷P1983】车站分级

    车站分级 题目链接 首先,可以发现火车停靠站点的大小是没有什么规律的, 火车可以停靠在级别<=当前级别的站点,必须停靠在级别>=当前最高级别的站点 但是所有没有被停靠的站点级别一定比所有被 ...

  8. 洛谷P1983车站分级

    洛谷\(P1983\)车站分级(拓扑排序) 目录 题目描述 题目分析 思路分析 代码实现 题目描述 题目在洛谷\(P1983\)上 ​ 题目: 一条单向的铁路线上,依次有编号为 \(1, 2, -, ...

  9. LG1983 「NOIP2013」车站分级 拓扑排序

    问题描述 LG1983 题解 考虑建立有向边\((a,b)\),代表\(a\)比\(b\)低级. 于是枚举每一辆车次经过的车站\(x \in [l,r]\),如果不是车辆停靠的车站,则从\(x\)向每 ...

  10. [NOIp2013普及组]车站分级

    思路: 对于每一趟车,将区间内所有经停的站和所有未经停的站连一条边,表示前者优先级一定高于后者,然后用Kahn跑一遍拓扑排序即可.然而这样会创造大量多余的边,会TLE1个点.考虑一种优化:因为每趟车本 ...

随机推荐

  1. netstat 命令查看端口状态详解

    转载请注明出处: netstat 可以查看服务器当前端口列表及指定端口的连接状态等: -t : 指明显示TCP端口,t是TCP的首字母. -u : 指明显示UDP端口,u是UDP的首字母 -p : 显 ...

  2. linux 服务器运行jmeter 进行服务性能压测

    本文为博主原创,转载请注明出处: 起初需要了解项目服务的性能和瓶颈,就想要用 jmeter 进行压测,刚开始都是启动本地的jmeter 压测服务器上项目服务的性能,发现服务器的 cpu 和内存等一直升 ...

  3. zookeeper分布式锁原理及使用 curator 实现分布式锁

    本文为博主原创,未经允许不得转载: 1. zookeeper 分布式锁应用场景及特点分析 2. zookeeper 分布式原理 3. curator 实现分布式锁 1. zookeeper 分布式锁: ...

  4. Windows 下 Outlook 点击关闭最小化和开机自动运行

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  5. 【转】获取本地图片的URL

        在写博客插入图片时,许多时候需要提供图片的url地址.作为菜鸡的我,自然是一脸懵逼.那么什么是所谓的url地址呢?又该如何获取图片的url地址呢? 首先来看一下度娘对url地址的解释:url是 ...

  6. CSS - 怎么样在不同分辨率的情况下计算根元素需要的font-size的值

    一般我们做页面,肯定都会有设计图,移动端页面,一般情况下,UI出图都会定宽为640px,这也是移动端的标准尺寸:但是,我们也不能排除可能有其他特殊的情况可能需要做其他大小的设计图.所以,我们可以先定一 ...

  7. [转帖]062、监控指标之PD

    PD相关 Grafana 监控 PD -> PD Dashboard 是否存在异常状态的TiKV Grafana 监控 PD -> Region health 大表清理后,出现了大量的空r ...

  8. [转帖]TiKV 内存参数性能调优

    https://docs.pingcap.com/zh/tidb/stable/tune-tikv-memory-performance 本文档用于描述如何根据机器配置情况来调整 TiKV 的参数,使 ...

  9. [转帖]jmeter学习笔记(二十二)——监听器插件之jp@gc系列

    一.jp@gc - Actiive Threads Over Time 不同时间活动用户数量展示 下面是一个阶梯加压测试的图标   二.jp@gc - Transactions per Second ...

  10. 【转帖】查看mysql库大小,表大小,索引大小

    https://www.cnblogs.com/lukcyjane/p/3849354.html 说明: 通过MySQL的 information_schema 数据库,可查询数据库中每个表占用的空间 ...