Submission #14913765


Source Code Expand

#!/usr/bin/env python3
"""
Cython test
"""
from collections import defaultdict
import sys

sys.setrecursionlimit(10**6)
input = sys.stdin.buffer.readline
INF = 10 ** 9 + 1  # sys.maxsize # float("inf")

cdef long[100010] longest

cdef get_longest(long start, dict edges):
    if longest[start] != -1:
        return longest[start]

    cdef list next_edges
    next_edges = edges[start]
    ret = 0
    for v in next_edges:
        x = get_longest(v, edges) + 1
        if x > ret:
            ret = x

    longest[start] = ret
    return ret


cdef solve(N, M, edges):
    for i in range(N + 1):
        if not edges.get(i):
            longest[i] = 0
        else:
            longest[i] = -1
    return max(get_longest(v, edges) for v in edges)


def main():
    N, M = map(int, input().split())
    edges = defaultdict(list)
    for i in range(M):
        v1, v2 = map(int, input().split())
        edges[v1].append(v2)

    print(solve(N, M, dict(edges)))


main()

Submission Info

Submission Time
Task G - Longest Path
User nishiohirokazu
Language Cython (0.29.16)
Score 100
Code Size 1019 Byte
Status AC
Exec Time 164 ms
Memory 41332 KiB

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 22
Set Name Test Cases
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
Case Name Status Exec Time Memory
0_00 AC 20 ms 9568 KiB
0_01 AC 27 ms 9500 KiB
0_02 AC 31 ms 9412 KiB
1_00 AC 27 ms 9780 KiB
1_01 AC 164 ms 41332 KiB
1_02 AC 90 ms 11720 KiB
1_03 AC 131 ms 25624 KiB
1_04 AC 122 ms 20484 KiB
1_05 AC 108 ms 18300 KiB
1_06 AC 105 ms 15848 KiB
1_07 AC 100 ms 14836 KiB
1_08 AC 90 ms 14036 KiB
1_09 AC 96 ms 13432 KiB
1_10 AC 89 ms 12360 KiB
1_11 AC 109 ms 16380 KiB
1_12 AC 130 ms 25612 KiB
1_13 AC 134 ms 26180 KiB
1_14 AC 104 ms 16668 KiB
1_15 AC 102 ms 15984 KiB
1_16 AC 137 ms 23908 KiB
1_17 AC 148 ms 27548 KiB
1_18 AC 118 ms 19744 KiB