Noip2013(普及组) 车站分级
题目描述 一条单向的铁路线上,依次有编号为 , , …, n 的 n 个火车站。每个火车站都有一个级别,最低为 级。现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车站 x,则始发站、终点站之间所有级别大于等于火车站 x 的都必须停靠。(注意:起始站和终点站自然也算作事先已知需要停靠的站点) 例如,下表是 趟车次的运行情况。其中,前 趟车次均满足要求,而第 趟车次由于停靠了 号火车站( 级)却未停靠途经的 号火车站(亦为 级)而不满足要求。 现有 m 趟车次的运行情况(全部满足要求),试推算这 n 个火车站至少分为几个不同的级别。 输入输出格式 输入格式:
输入文件为 level.in。 第一行包含 个正整数 n, m,用一个空格隔开。 第 i + 行( ≤ i ≤ m)中,首先是一个正整数 si( ≤ si ≤ n),表示第 i 趟车次有 si 个停靠站;接下来有 si个正整数,表示所有停靠站的编号,从小到大排列。每两个数之间用一个空格隔开。输入保证所有的车次都满足要求。 输出格式:
输出文件为 level.out。 输出只有一行,包含一个正整数,即 n 个火车站最少划分的级别数。 输入输出样例 输入样例#: 输出样例#: 输入样例#: 输出样例#: 说明 对于 %的数据, ≤ n, m ≤ ; 对于 %的数据, ≤ n, m ≤ ; 对于 %的数据, ≤ n, m ≤ 。
题目

芒果君:拓扑排序还是很容易看出来的(毕竟好多奇奇怪怪的题最后都变成图论了……),关系也很好建立,被跳过的站点比没跳过的优先级低,那就暴力建边。之前求拓扑排序都是栈模拟,这次没换dfs之前T了3个点。以后就都用dfs了。
#include<cstdio>
#include<cmath>
#include<ctime>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<vector>
#define maxn 1010
#define inf 1<<29
using namespace std;
typedef long long ll;
vector<int>Edge[maxn];
stack<int>S;
int ans,n,m,st,ed,rm,num,rec[maxn],tmp[maxn];
bool vis[maxn][maxn];
inline int read()
{
char ch=getchar();
int x();
while(ch<''||ch>'') ch=getchar();
while(ch>=''&&ch<=''){
x=x*+ch-'';
ch=getchar();
}
return x;
}
void dfs(int x)
{
if(rec[x]) return;
rec[x]=;
for(int i=;i<Edge[x].size();++i){
dfs(Edge[x][i]);
rec[x]=max(rec[x],rec[Edge[x][i]]+);
}
ans=max(ans,rec[x]);
}
int main()
{
scanf("%d%d",&n,&m);
rm=n;
while(m--){
num=read();
for(int i=;i<=num;++i) tmp[i]=read();
for(int i=;i<num;++i) for(int j=tmp[i]+;j<tmp[i+];++j) for(int k=;k<=num;++k) if(!vis[j][tmp[k]]) Edge[j].push_back(tmp[k]),vis[j][tmp[k]]=;
}
for(int i=;i<=n;++i) if(!rec[i]) dfs(i);
printf("%d\n",ans);
return ;
}
Noip2013(普及组) 车站分级的更多相关文章
- [NOIp2013普及组]车站分级
思路: 对于每一趟车,将区间内所有经停的站和所有未经停的站连一条边,表示前者优先级一定高于后者,然后用Kahn跑一遍拓扑排序即可.然而这样会创造大量多余的边,会TLE1个点.考虑一种优化:因为每趟车本 ...
- 【NOIP2013 普及组】车站分级
[NOIP2013 普及组]车站分级 一.题目 [NOIP2013 普及组]车站分级 时间限制: 1 Sec 内存限制: 128 MB 提交: 3 解决: 0 [提交][状态][讨论版] 题目描述 ...
- [NOIP2013] 普及组
计数问题 纯模拟 #include<cstdio> #include<iostream> using namespace std; int main(){ int n,x; c ...
- NOIP2013普及组 -SilverN
T1 计数问题 题目描述 试计算在区间 1 到 n 的所有整数中,数字 x(0 ≤ x ≤ 9)共出现了多少次?例如,在 1 到 11 中,即在 1.2.3.4.5.6.7.8.9.10.11 中, ...
- NOIP2013普及组 T2 表达式求值
OJ地址:洛谷P1981 CODEVS 3292 正常写法是用栈 #include<iostream> #include<algorithm> #include<cmat ...
- [NOIP2013 普及组] 表达式求值
[NOIP2013 普及组] 表达式求值 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值. Input 一行,为需要你计算的表达式,表达式中只包含数字.加法运算符"+" ...
- 洛谷——P1980 [NOIP2013 普及组] 计数问题
题目描述 试计算在区间 11 到 nn的所有整数中,数字x(0 ≤ x ≤ 9)x(0≤x≤9)共出现了多少次?例如,在 11到1111中,即在 1,2,3,4,5,6,7,8,9,10,111,2, ...
- [NOIP2013]车站分级 解题报告
妈蛋这道普及组水(神)题搞了我非常久. 一. 首先一个非常显然的事情就是每一个火车告诉了站与站之间的等级关系,所以拓扑求最长路. 可是发现暴力建边的话最坏能够达到500*500,所以时间复杂度有O(M ...
- NOIP2002-2017普及组题解
虽然普及组一般都是暴力省一,但是有一些题目还是挺难的qwq个人觉得能进TG的题目会在前面打上'*' NOIP2002(clear) #include<bits/stdc++.h> usin ...
随机推荐
- VSCodeUserSetup安装教程
VSCodeUserSetup: isual Studio Code是一个轻量级但功能强大的源代码编辑器,可在桌面上运行,适用于Windows,macOS和Linux.它内置了对JavaScript, ...
- QVariantMap 和 QVariant
typedef QVariantMap Synonym for(同义词) QMap<QString, QVariant>. QVariant类型的放入和取出必须是相对应的,你放入一个int ...
- CMD browser in Linux -- Links
Links is an open source web browser written in C programming Language. It is available for all major ...
- python 列表 【基本使用功能】
#!/usr/bin/python # -*- coding: UTF-8 -*- # by Mercury_Lc list1 = list # 开个新的列表的方法 list2 = [] list1 ...
- HTTP状态码和支持的方法
1. HTTP常用状态码 200 ok 客户端请求成功 400 bad request 客户端请求有语法错误,不能被服务器所理解 401 unauthorized 请求要求身份验证,对于登录后请求 ...
- 【原】Python基础-异常
def cacls(x, y): try: return x/y except ZeroDivisionError: print("y can not be zerp") exce ...
- [RK3399] 修改移动网络默认为4G
CPU:RK3399 系统:Android 7.1 现在手机卡都默认是 4G 网路,但是源码中默认的还是 3G网络,每次都要手动改到 4G. 下面在源码中就直接将默认网络改为4G. PREFERRED ...
- Go -- IP to int ip字符串和十进制相互转化
package main import ( "fmt" "net" "reflect" "github.com/thinkerid ...
- 表单Content-Type为multipart/form-data时,后台数据的接收
我们在写form提交表单的时候,后台大多数用request.getParameter的方式来接收前台输入的数据.但如果我们表单中提交的数据包含file文件传输的话,我们需要将Content-Type改 ...
- 记一次用WireShark抓包摆脱Si服后台限制的过程
背景:闲着无聊找了个小众的手游,因为手游都是比较吃金的,所以就找了个Si服,鉴于小时候宝可梦的情怀,就TB买了个GM后台.谁知这玩意有限制,到了100级之后升级超级难,最多只能发送99999W点经验, ...