[Noip2013]车站分级

Link
很脑缺的一道题,我也不知道自己为什么要整这个。
首先我们把题目转化一下,也就是在$i$车站之后没有停靠的火车站,其级别肯定都是低于$i$的级别。
于是我们有了一堆车站的大小关系,选择从小级别的车站像大级别的车站连边,然后跑一下拓扑排序就行了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std ;

typedef long long LL ;
const int MAXN = 1010 ;
const int MAXM = 1010 ;
const int Inf = 0x7fffffff ;

int N, M, Train[MAXN][MAXN], S[MAXN], H[MAXN], Tot, Ans ;
bool V[MAXN], Link[MAXN][MAXN] ; int Ind[MAXN] ;
struct Node { int F ; int T ; int Next ;} E[MAXN << 10] ;
//数组大小一定要开够,不然会爆炸.....
struct Node2 { int Num ; int Level ;} G ;
queue<Node2> Q ;

inline int Read() {
int X = 0, F = 1 ; char ch = getchar() ;
while (ch > '9' || ch < '0') F = (ch == '-' ? - 1 : 1), ch = getchar() ;
while (ch >= '0' && ch <= '9') X=(X<<1)+(X<<3)+(ch^48), ch = getchar() ;
return X * F ;
}

inline void Add (int F, int T) {
E[++ Tot].F = F ; E[Tot].T = T, E[Tot].Next = H[F], H[F] = Tot ;
}

inline void Topo() {
Ans = 1 ;
for (int i = 1 ; i <= N ; i ++)
if (! Ind[i]) Q.push({i, 1}) ;
while (! Q.empty()) {
int Now = Q.front().Num, L = Q.front().Level ;
Q.pop() ;
for (int i = H[Now] ; i ; i = E[i].Next) {
Ind[E[i].T] -- ;
if (! Ind[E[i].T]) Q.push({E[i].T, L + 1}),
Ans = max(Ans, L + 1) ;
}
}
}

int main() {
N = Read(), M = Read() ;
for (int i = 1 ; i <= M ; i ++) {
S[i] = Read() ;
memset(V, 0, sizeof(V)) ;
for (int j = 1 ; j <= S[i] ; j ++)
Train[i][j] = Read(), V[Train[i][j]] = 1 ;
for (int j = Train[i][1] ; j <= Train[i][S[i]] ; j ++) {
if (! V[j])
for (int k = 1 ; k <= S[i] ; k ++)
if (! Link[j][Train[i][k]]) {
Ind[Train[i][k]] ++ ;
Add(j, Train[i][k]) ;
Link[j][Train[i][k]] = 1 ;
}
}
} Topo() ; printf("%d", Ans) ; return 0 ;
}

本文标题:[Noip2013]车站分级

文章作者:Sue Shallow

发布时间:2019年03月09日 - 20:42:52

最后更新:2019年11月11日 - 19:53:09

原始链接:http://Yeasion.github.io/2019/03/09/Noip2013-车站分级/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。