Luogu P1983 车站分级
(一周没写过随笔了)
这道题有坑!
看到题目,发现这么明显(??)的要求顺序,还有什么想法,拓扑!
将每条路范围内等级大于等于它的点(不能重复(坑点1))和它连一条边,注意起点终点都要有(坑点2),然后拓扑求解即可。
BFS的拓扑感觉更好。
然后打了个map判重交上去帅气的TLE了3个点
#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
#include<map>
using namespace std;
const int N=;
vector <int> a[N];
map <int,bool> ma[N];
int n,i,m,j,q[N*+],head,tail,s[N],x,k,ru[N],bs[N],ans;
bool f[N];
inline void read(int &x)
{
x=; char ch=getchar();
while (ch<''||ch>'') ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
}
int main()
{
read(n); read(m);
for (i=;i<=m;++i)
{
memset(f,,sizeof(f));
read(s[]);
for (j=;j<=s[];++j)
read(s[j]),f[s[j]]=;
for (j=s[]+;j<=s[s[]];++j)
if (!f[j])
for (k=;k<=s[];++k)
if (!ma[s[k]][j]) a[s[k]].push_back(j),ru[j]++,ma[s[k]][j]=;
}
for (i=;i<=n;++i)
if (!ru[i]) q[++tail]=i,bs[i]=;
while (head<tail)
{
int now=q[++head];
for (i=;i<a[now].size();++i)
{
int k=a[now][i];
bs[k]=bs[now]+;
ans=max(ans,bs[k]);
if (!(--ru[k])) q[++tail]=k;
}
}
printf("%d",ans);
return ;
}
然后一想,N<=1000至于用map么。然后直接二维数组判断,然后过了。。。
#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
using namespace std;
const int N=;
vector <int> a[N];
int n,i,m,j,q[N*+],head,tail,s[N],x,k,ru[N],bs[N],ans;
bool f[N],p[N][N];
inline void read(int &x)
{
x=; char ch=getchar();
while (ch<''||ch>'') ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
}
int main()
{
read(n); read(m);
for (i=;i<=m;++i)
{
memset(f,,sizeof(f));
read(s[]);
for (j=;j<=s[];++j)
read(s[j]),f[s[j]]=;
for (j=s[];j<=s[s[]];++j)
if (!f[j])
for (k=;k<=s[];++k)
if (!p[s[k]][j]) a[s[k]].push_back(j),ru[j]++,p[s[k]][j]=;
}
for (i=;i<=n;++i)
if (!ru[i]) q[++tail]=i,bs[i]=;
while (head<tail)
{
int now=q[++head];
for (i=;i<a[now].size();++i)
{
int k=a[now][i];
bs[k]=bs[now]+;
ans=max(ans,bs[k]);
if (!(--ru[k])) q[++tail]=k;
}
}
printf("%d",ans);
return ;
}
一道坑题!
Luogu P1983 车站分级的更多相关文章
- 【luogu P1983 车站分级】 题解
题目链接:https://www.luogu.org/problemnew/show/P1983 符合了NOIP命题的特点,知识点不难,思维量是有的. step1:把题读进去,理解.得到 非停靠点的等 ...
- 洛谷P1983 车站分级
P1983 车站分级 297通过 1.1K提交 题目提供者该用户不存在 标签图论贪心NOIp普及组2013 难度普及/提高- 提交该题 讨论 题解 记录 最新讨论 求帮忙指出问题! 我这么和(diao ...
- 洛谷P1983车站分级
洛谷\(P1983\)车站分级(拓扑排序) 目录 题目描述 题目分析 思路分析 代码实现 题目描述 题目在洛谷\(P1983\)上 题目: 一条单向的铁路线上,依次有编号为 \(1, 2, -, ...
- 洛谷 P1983 车站分级
题目链接 https://www.luogu.org/problemnew/show/P1983 题目描述 一条单向的铁路线上,依次有编号为 1,2,…,n的 n个火车站.每个火车站都有一个级别,最低 ...
- 洛谷P1983车站分级题解
题目 这个题非常毒瘤,只要还是体现在其思维难度上,因为要停留的车站的等级一定要大于不停留的车站的等级,因此我们可以从不停留的车站向停留的车站进行连边,然后从入度为0的点即不停留的点全都入队,然后拓扑排 ...
- P1983 车站分级[拓扑]
题目描述 一条单向的铁路线上,依次有编号为 1, 2, -, n1,2,-,n的 nn个火车站.每个火车站都有一个级别,最低为 11 级.现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟 ...
- 【洛谷P1983 车站分级】
这题好像是个蓝题.(不过也确实差不多QwQ)用到了拓扑排序的知识 我们看这些这车站,沿途停过的车站一定比未停的车站的级别高 所以,未停靠的车站向已经停靠的车站连一条边,入度为0的车站级别就看做1 然后 ...
- P1983车站分级
%%%rqy 传送 我们注意到题目中这段话: 既然大于等于x的站都要停,那么不停的站的级别是不是都小于x?(这里讨论在始发站和终点站以内的站(注意这里是个坑)) 我们可以找出每趟车没停的站,向所有停了 ...
- P1983 车站分级
题目描述 一条单向的铁路线上,依次有编号为 1, 2, …, n 的 n 个火车站.每个火车站都有一个级别,最低为 1 级.现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车 ...
随机推荐
- ionic左滑删除
<html ng-app="ionicApp"> <head> <meta charset="utf-8"> <met ...
- MATLAB中批量导入.mat文件(每个文件多变量)
一.新建MATLAB script(.m文件):readall_mat.m 二.代码如下: function data = readall_mat(path) % READALL_MAT 读取所有文件 ...
- SSM整合配置文件的主要内容
web.xml: <servlet> <setvlet-name>springMVC</setvlet-name> <!-- 配置前端控制器 --> & ...
- 【转】学习Linux守护进程详细笔记
[原文]https://www.toutiao.com/i6566814959966093837/ Linux守护进程 一. 守护进程概述 守护进程,也就是通常所说的Daemon进程,是Linux中的 ...
- eclipse快捷键调试总结
(1)Ctrl+M --切换窗口的大小 (2)Ctrl+Q --跳到最后一次的编辑处 (3)F2 ---重命名类名 工程名 --当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开 ...
- qt调用sql server存储过程并获取output参数
最近新做的一个项目需要使用qt5连接另一台机器上的sql server,虽然网上已有类似文章,但还是有些其中很少提及的问题,故在这里汇总下: qt连接sql server可以参考这篇文章: <Q ...
- Hyper-v虚拟化
1.打开Hyper-V管理器,新建虚拟机 2.点击下一步,继续设置 3.设置虚拟机名称和存储位置,点击选择打钩,自定义路径 4.设置虚拟机运行内存 5.设置虚拟机设置好的网络 6.创建虚拟磁盘 7创建 ...
- Spring Boot 集成 thymeleaf 模版引擎
Spring Boot 建议使用 HTML 来完成动态页面.Spring Boot 提供了大量的模版引擎,包括 Thymeleaf.FreeMarker.Velocity等. Spring Boot ...
- 难度并不NOIP的NOIP模拟赛
今天老师请了前几届的学长来讲课,可是讲课为什么要考试呢... 学长说难度是NOIP,于是我就naive的跟着参加了,然而T3难度并不友好,感觉确实不是很适合我们现在做......不过课本来也不是给我们 ...
- BZOJ5369:[PKUSC2018]最大前缀和(状压DP)
Description 小C是一个算法竞赛爱好者,有一天小C遇到了一个非常难的问题:求一个序列的最大子段和. 但是小C并不会做这个题,于是小C决定把序列随机打乱,然后取序列的最大前缀和作为答案. 小C ...