%%%rqy

传送

我们注意到题目中这段话:

既然大于等于x的站都要停,那么不停的站的级别是不是都小于x?(这里讨论在始发站和终点站以内的站(注意这里是个坑))

我们可以找出每趟车没停的站,向所有停了的站建一条边,表示没停的站的级别<停了的站的级别,同时记录所有的站的入度

这样,一开始入度为0的站级别就是1。

对于那些入度不为0的点来说,它们的级别就是所有指向它的点中,级别最大的那个点的级别+1

for example

因为每个级别为a车站x不一定只有级别为a-1的车站向x连边。

那程序怎么实现呢?

据大佬说要跑拓扑排序(%%%ych)

简单的说:

先将所有入度为0的点入队,遍历它们的每条出边,将所有到达的点的入度-1。如果有入度为0的点,就将其入队,并且它的级别为当前出队的点的级别+1。当队空时,拓扑排序结束。

这样为什么能保证达到上图的效果呢?因为对于任意一点i来说,如果当前出队的点为j,若存在有连接i且级别比j大的点k,则k此时入度一定不为0(还没遍历j的出边时),就可以保证先算k的级别,再算i的级别了。

复杂的说,走这里

跑完拓扑排序,我们将所有点的级别sort一遍,找最大的,就是答案。

小坑见代码

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
int aans,n,m,s[][],in[],head[],cnt,ans[];
bool jb[][];//b[i][j]为i到j是否建过边(不建重边)
queue <int> q;
struct Edge{
int to,next;
}edge[];//开大点(我也不知道最多有几条边,总之开小了会wa)
void add(int fr,int to)//前向星存图
{
cnt++;
edge[cnt].to=to;
edge[cnt].next=head[fr];
head[fr]=cnt;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d",&s[i][]);
bool rr[];int start,end;
memset(rr,,sizeof(rr));
for(int j=;j<=s[i][];j++)
{
scanf("%d",&s[i][j]);
rr[s[i][j]]=;//标记每个点是否到达 }start=s[i][];end=s[i][s[i][]];
for(int j=start;j<=end;j++)//注意一定是讨论始发站和终点站以内的车站(见样例)
{
if(!rr[j])
{
for(int k=;k<=s[i][];k++)
{
if(!jb[j][s[i][k]])//不建重边
{add(j,s[i][k]);
in[s[i][k]]++;//建边的时候统计入度
jb[j][s[i][k]]=;
}
}
}
}
}
for(int i=;i<=n;i++)
{
if(!in[i])
{
q.push(i);
ans[i]=;
}
}
while(!q.empty())//跑拓扑排序
{
int u=q.front();
q.pop();
for(int i=head[u];i;i=edge[i].next)
{
in[edge[i].to]--;
if(in[edge[i].to]==)
{
q.push(edge[i].to);
ans[edge[i].to]=ans[u]+;
}
}
}
sort(ans+,ans++n);
printf("%d",ans[n]);
}

P1983车站分级的更多相关文章

  1. 洛谷P1983 车站分级

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

  2. 洛谷P1983车站分级

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

  3. 洛谷 P1983 车站分级

    题目链接 https://www.luogu.org/problemnew/show/P1983 题目描述 一条单向的铁路线上,依次有编号为 1,2,…,n的 n个火车站.每个火车站都有一个级别,最低 ...

  4. 洛谷P1983车站分级题解

    题目 这个题非常毒瘤,只要还是体现在其思维难度上,因为要停留的车站的等级一定要大于不停留的车站的等级,因此我们可以从不停留的车站向停留的车站进行连边,然后从入度为0的点即不停留的点全都入队,然后拓扑排 ...

  5. 【luogu P1983 车站分级】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1983 符合了NOIP命题的特点,知识点不难,思维量是有的. step1:把题读进去,理解.得到 非停靠点的等 ...

  6. P1983 车站分级[拓扑]

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

  7. 【洛谷P1983 车站分级】

    这题好像是个蓝题.(不过也确实差不多QwQ)用到了拓扑排序的知识 我们看这些这车站,沿途停过的车站一定比未停的车站的级别高 所以,未停靠的车站向已经停靠的车站连一条边,入度为0的车站级别就看做1 然后 ...

  8. P1983 车站分级

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

  9. Luogu P1983 车站分级

    (一周没写过随笔了) 这道题有坑! 看到题目,发现这么明显(??)的要求顺序,还有什么想法,拓扑! 将每条路范围内等级大于等于它的点(不能重复(坑点1))和它连一条边,注意起点终点都要有(坑点2),然 ...

随机推荐

  1. Myeclipse 快捷键大全(绝对全)

    非常感谢分享这篇文章的大虾..但是我忘了几下您的blog地址,因此无法注明原文地址...见谅哈 存盘 Ctrl+s(肯定知道) 注释代码 Ctrl+/ 取消注释 Ctrl+\(Eclipse3已经都合 ...

  2. Java学习day9面向对象编程2-方法的可变个数的参数和方法的参数传递

    一.方法的可变个数的参数. 问题:我们能够打印的信息都是来源于方法的参数,也就是形参的传递.那如何要给方法传递不同的参数? .1.采用数组形参来定义方法 public static void test ...

  3. Codeforces 601B(贪心+斜率+组合数学+单调栈)

    题面 传送门 题目大意: L(h)的值是区间[L,R]内,abs(h[i]-h[j])/(i-j)的最大值.现在有q个询问,每个询问表示询问区间[L,R]内,所有子序列的L(h)的值的和 分析 将|h ...

  4. Hdu 4578 Transformation (线段树 分类分析)

    Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others)T ...

  5. 【JAVA】input.next().charAt(0);的含义

    接收键盘输入的字符串,并且取出它的第一个字符. 分析: Scanner scan=new Scanner(System.in); String s=scan.next(); //返回一个String ...

  6. java 回调的原理与实现

    回调函数,顾名思义,用于回调的函数.回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数.回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机. 回调原本应该是一个非常简 ...

  7. C#Stopwatch的简单计时 [收藏]

    Stopwatch 类 命名空间:System.Diagnostics.Stopwatch 实例化:Stopwatch getTime=new Stopwatch(); 开始计时:getTime.St ...

  8. Python之文件的读

    python中文件的读操作:以只读的形式打开文件->逐行读取文件中的内容->关闭文件 代码如下 #文件的读 f = file(u'F:\\python\\homework.txt', 'r ...

  9. R语言抽样的问题

    基本抽样函数sample sample(x,size,replace=F/T) x是数据集, size规定了从对象中抽出多少个数 replace 为F时候,表示每次​抽取后的数就不能在下一次被抽取:T ...

  10. mona!mona!mona!

    $ PS: $ 关于\(mona\) 是只很棒的猫啦!想知道的可以自己去看\(persona5\)的游戏流程或者动画版啦. \(PPS:\) 补充一下设定啊,\(mona\)是摩尔加纳(原名)的代号啦 ...