题目描述

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

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

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

输入输出格式

输入格式:

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

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

输出格式:

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

思路:

这么多巨佬在上,我这个蒟蒻也只能来一发树形DP了(其实好像是森林DP因为我懒得建超级根节点了

很多大佬都用了拓扑排序,这是个好思想,但我太弱了不会用

我的这个树形DP的连边和很多大佬很像,每一条线路分别处理

如果某个点在起点到终点范围内,且没有停靠,由题意可知,这几站一定比停靠站的等级低,我就从停靠的站向不停靠的站连边,表示大小关系,当然,我不连重边

然后我开始遍历一遍所有的点,如果这个点没有入边,就说明它可能是最大的,我从这个点跑树形DP,每上升一层,大小+1,我们用动规找到最大层数,就是这个根点的答案

当然,我要求的是全图层数,当然要写一个max来比较了。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#define rii register int i
#define rij register int j
using namespace std;
struct cz{int rd,cd,to[1005];
}x[1005];
int n,bj[1005],ans,tk[1005],bs,kkk,ltt,m,gh[1005][1005],as[1005],sf[1005];
void jb(int bh)
{x[bh].rd+=ltt;for(rii=1;i<=ltt;i++){if(gh[bh][tk[i]]==0){bs++;x[tk[i]].cd++;x[tk[i]].to[x[tk[i]].cd]=bh;gh[bh][tk[i]]=1;}}
}
void dplast(int wz)
{for(rii=1;i<=x[wz].cd;i++){if(sf[x[wz].to[i]]==0){dplast(x[wz].to[i]);sf[x[wz].to[i]]=1;}as[wz]=max(as[wz],as[x[wz].to[i]]+1);}
}
int main()
{scanf("%d%d",&n,&m);for(rii=1;i<=m;i++){int st,fi;memset(bj,0,sizeof(bj));scanf("%d",&ltt);for(rij=1;j<=ltt;j++){scanf("%d",&kkk);tk[j]=kkk;bj[kkk]=1;if(j==1){st=kkk;}if(j==ltt){fi=kkk;}}for(rij=st+1;j<fi;j++)//建边
        {if(bj[j]==0){jb(j);}}}for(rii=1;i<=n;i++){if(x[i].cd==0)//初始化,如果是叶子节点,就不需要向下寻找,层数默认是1
        {as[i]=1;sf[i]=1;}}int maxn=0;for(rii=1;i<=n;i++){if(x[i].rd==0){dplast(i);}}for(rii=1;i<=n;i++){maxn=max(maxn,as[i]);}cout<<maxn;
}

转载于:https://www.cnblogs.com/ztz11/p/9280160.html

车站分级 (2013noip普及组T4)(树形DP)相关推荐

  1. NOIP2012 普及组 T4 文化之旅

    文化之旅 (NOIP2012 普及组 T4 ) 题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文 ...

  2. 【vijos P1914】【codevs 3904】[NOIP2014 普及组T4]子矩阵(dfs+状压dp)

    P1914子矩阵 Accepted 标签:NOIP普及组2014[显示标签] 描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与 列的相对顺序)被称为原矩阵 ...

  3. NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)

    题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣的内容.最近,他准备给小朋友们讲解立体图,请你帮他画出立体图. 小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子,每 ...

  4. 题解:子矩阵(NOIP2014普及组T4)

    又是dp 暴力枚举会T 考虑先固定一个变量,比如先枚举行 然后预处理每行之间的绝对值,每列之间的绝对值 然后dp进行转移 注意记录选择的行数 转移记得加上新选的列的行之间的绝对值,即w[i], 1 # ...

  5. C++——NOIP2016普及组 t4——魔法阵

    题目描述 六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法能量. 大魔法师有 m 个魔法物品,编号分别为 1,2,...,m  .每个物品具有一个魔法值,我们用 xi 表示编号为  ...

  6. NOIP普及组历届真题(1997~2018)

    供大家刷题. 先上快捷的查看方式:NOIP普及组历届真题 第二页 来自洛谷--一个很好的刷题网站 剩下是具体题目和难度以及是第几年的题. P1002 过河卒 NOIp普及组 2002 普及- P100 ...

  7. 历年CSP-J(NOIP普及组)分类汇总目录

    内容持续更新中... ... [2022CSPJ普及组]T1.乘方                    数学问题 [2022CSPJ普及组]T2.解密                    数学问题 ...

  8. [NOIP2017 普及组]跳房子 【题解】

    题目背景 NOIP2017 普及组 T4 题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 n n ...

  9. noip2017爆炸记——题解总结反省(普及组+提高组)

    相关链接: noip2018总结 noip2017是我见过的有史以来最坑爹的一场考试了. 今年北京市考点有一个是我们学校,我还恰好被分到了自己学校(还是自己天天上课的那个教室),于是我同时报了普及提高 ...

最新文章

  1. 【leetcode 968. 监控二叉树】解题报告
  2. 2D 游戏引擎 AlloyGameEngine
  3. 【特征工程】与【表示学习】
  4. kali查看共享 linux_在Linux下访问Windows共享文件夹
  5. pccad自定义图框_(PCCAD自定义标题栏详细方法.doc
  6. [react] 如何更新组件的状态?
  7. c/s及b/s结构比较
  8. LAV Filter 源代码分析 3: LAV Video (1)
  9. 【笔记】EFCore SQLite 拼音汉字互换
  10. 2019 第十届蓝桥杯Java省赛B组个人题解
  11. 分享《模拟专升本考试排名》
  12. DTOI 10.24 测试(被爆屠) orz IcePrincess_1968
  13. Redis源码解读(二十五)——集群模式—failover
  14. 这 5 款软件,让你的电脑变得更高效!
  15. dos系统的界面字体设置
  16. libusb android 编译,Android如何对libusb进行编译和使用
  17. CodeBERT理解
  18. RT5350订制WIFI转串口
  19. 塔望食品品牌营销:叠加爆发,能量饮料与IP嗑CP的正确姿势
  20. 51信用卡到底安全吗?

热门文章

  1. oracle12542,Oracle 11Gr1监听报错 TNS-12542 12560 00512
  2. python编写登录接口_Python之编写登录接口
  3. spring boot 教程(五)使用JdbcTemplate访问数据库
  4. cmake编译多个文件夹_CMake应用技巧:在一个工程中编译运行多个文件
  5. python卸载_Python包管理工具pip - amanlikethis
  6. python多线程提高速度_Python3如何使用多线程升程序运行速度
  7. docker_4 数据卷技术
  8. 利用3D转换实现旋转木马
  9. http请求状态码表示的意义
  10. mysql join不加关联条件的含义