提出 #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()

提出情報

提出日時
問題 G - Longest Path
ユーザ nishiohirokazu
言語 Python (3.8.2)
得点 100
コード長 2935 Byte
結果 AC
実行時間 1225 ms
メモリ 132680 KiB

ジャッジ結果

セット名 All
得点 / 配点 100 / 100
結果
AC × 22
セット名 テストケース
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