提出 #14915733
ソースコード 拡げる
#!/usr/bin/env python3
from collections import defaultdict
from heapq import heappush, heappop
import sys
import numpy as np
import numba
sys.setrecursionlimit(10**6)
input = sys.stdin.buffer.readline
INF = 10 ** 9 + 1 # sys.maxsize # float("inf")
def debug(*x):
print(*x)
@numba.njit
def get_longest(start, values, next, head, longest):
ret = longest[start]
if ret != -1:
return ret
ret = 0
p = head[start]
while p:
v = values[p]
x = get_longest(v, values, next, head, longest) + 1
if x > ret:
ret = x
p = next[p]
longest[start] = ret
return ret
@numba.njit
def solve(N, M, data):
longest = np.repeat(-1, N + 1)
values = np.zeros(M + 1, np.int32)
next = np.zeros(M + 1, np.int32)
head = np.zeros(N + 1, np.int32)
p = 1
for i in range(0, 2 * M, 2):
v1 = data[i]
v2 = data[i + 1]
values[p] = v2
next[p] = head[v1]
head[v1] = p
p += 1
for i in range(N + 1):
if head[i] == 0:
longest[i] = 0
ret = 0
for v in range(N + 1):
x = get_longest(v, values, next, head, longest)
if x > ret:
ret = x
return ret
def main():
N, M = map(int, input().split())
data = np.int32(read().split())
print(solve(N, M, data))
T1 = """
4 5
1 2
1 3
3 2
2 4
3 4
"""
T2 = """
6 3
2 3
4 5
5 6
"""
T3 = """
5 8
5 3
2 3
2 4
5 2
5 1
1 4
4 3
1 3
"""
def _test():
"""
# >>> as_input(T1)
# >>> main()
# 3
# >>> as_input(T2)
# >>> main()
# 2
>>> as_input(T3)
>>> main()
3
"""
import doctest
doctest.testmod()
def as_input(s):
"use in test, use given string as input file"
import io
global read, input
f = io.StringIO(s.strip())
input = f.readline
read = f.read
USE_NUMBA = False
if (USE_NUMBA and sys.argv[-1] == 'ONLINE_JUDGE') or sys.argv[-1] == '-c':
print("compiling")
from numba.pycc import CC
import numba
cc = CC('my_module')
cc.export(
'solve',
numba.i8(
numba.i8, numba.i8,
numba.typeof({1: [1]})))(solve)
cc.compile()
exit()
else:
input = sys.stdin.buffer.readline
read = sys.stdin.buffer.read
if (USE_NUMBA and sys.argv[-1] != '-p') or sys.argv[-1] == "--numba":
# -p: pure python mode
# if not -p, import compiled module
from my_module import solve # pylint: disable=all
elif sys.argv[-1] == "-t":
_test()
sys.exit()
elif sys.argv[-1] != '-p' and len(sys.argv) == 2:
# input given as file
input_as_file = open(sys.argv[1])
input = input_as_file.buffer.readline
read = input_as_file.buffer.read
main()
提出情報
ジャッジ結果
| セット名 |
All |
| 得点 / 配点 |
100 / 100 |
| 結果 |
|
| セット名 |
テストケース |
| All |
0_00, 0_01, 0_02, 1_00, 1_01, 1_02, 1_03, 1_04, 1_05, 1_06, 1_07, 1_08, 1_09, 1_10, 1_11, 1_12, 1_13, 1_14, 1_15, 1_16, 1_17, 1_18 |
| ケース名 |
結果 |
実行時間 |
メモリ |
| 0_00 |
AC |
1208 ms |
116564 KiB |
| 0_01 |
AC |
1182 ms |
116068 KiB |
| 0_02 |
AC |
1175 ms |
116360 KiB |
| 1_00 |
AC |
1163 ms |
115936 KiB |
| 1_01 |
AC |
1225 ms |
132680 KiB |
| 1_02 |
AC |
1204 ms |
117832 KiB |
| 1_03 |
AC |
1209 ms |
118924 KiB |
| 1_04 |
AC |
1222 ms |
117784 KiB |
| 1_05 |
AC |
1208 ms |
117816 KiB |
| 1_06 |
AC |
1209 ms |
118012 KiB |
| 1_07 |
AC |
1201 ms |
117860 KiB |
| 1_08 |
AC |
1202 ms |
117880 KiB |
| 1_09 |
AC |
1212 ms |
117676 KiB |
| 1_10 |
AC |
1213 ms |
117712 KiB |
| 1_11 |
AC |
1195 ms |
117496 KiB |
| 1_12 |
AC |
1195 ms |
119244 KiB |
| 1_13 |
AC |
1199 ms |
119004 KiB |
| 1_14 |
AC |
1201 ms |
118084 KiB |
| 1_15 |
AC |
1192 ms |
117900 KiB |
| 1_16 |
AC |
1209 ms |
118728 KiB |
| 1_17 |
AC |
1209 ms |
119096 KiB |
| 1_18 |
AC |
1218 ms |
118628 KiB |