結果

問題 No.1865 Make Cycle
ユーザー H3PO4H3PO4
提出日時 2022-03-04 22:31:09
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 312 ms / 3,000 ms
コード長 1,030 bytes
コンパイル時間 299 ms
コンパイル使用メモリ 86,964 KB
実行使用メモリ 110,420 KB
最終ジャッジ日時 2023-09-26 01:39:38
合計ジャッジ時間 7,599 ms
ジャッジサーバーID
(参考情報)
judge13 / judge11
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 296 ms
105,556 KB
testcase_01 AC 234 ms
98,848 KB
testcase_02 AC 295 ms
105,584 KB
testcase_03 AC 262 ms
103,184 KB
testcase_04 AC 266 ms
105,144 KB
testcase_05 AC 245 ms
105,544 KB
testcase_06 AC 245 ms
103,528 KB
testcase_07 AC 278 ms
105,572 KB
testcase_08 AC 312 ms
110,420 KB
testcase_09 AC 244 ms
101,216 KB
testcase_10 AC 303 ms
107,896 KB
testcase_11 AC 262 ms
105,204 KB
testcase_12 AC 257 ms
103,304 KB
testcase_13 AC 296 ms
102,044 KB
testcase_14 AC 221 ms
97,908 KB
testcase_15 AC 291 ms
105,464 KB
testcase_16 AC 269 ms
109,832 KB
testcase_17 AC 234 ms
101,396 KB
testcase_18 AC 239 ms
103,348 KB
testcase_19 AC 299 ms
110,132 KB
testcase_20 AC 95 ms
71,488 KB
testcase_21 AC 95 ms
71,612 KB
testcase_22 AC 96 ms
71,748 KB
testcase_23 AC 98 ms
71,696 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
from collections import deque

input = sys.stdin.buffer.readline

N, Q = map(int, input().split())
edges = tuple(tuple(int(x) - 1 for x in input().split()) for _ in range(Q))
deg = [0] * N
G = [[] for _ in range(N)]
for i, (a, b) in enumerate(edges):
    deg[b] += 1
    G[a].append((i, b))

deg_is_zero = set(i for i, x in enumerate(deg) if not x)
d = deque(deg_is_zero)
visited_edge = [False] * Q


def dfs(d):
    while d:
        v = d.popleft()
        for i, x in G[v]:
            if visited_edge[i]:
                continue
            visited_edge[i] = True
            deg[x] -= 1
            if not deg[x]:
                d.append(x)
                deg_is_zero.add(x)


dfs(d)

if len(deg_is_zero) == N:
    print(-1)

for i in range(Q, 0, -1):
    if visited_edge[i - 1]:
        continue
    b = edges[i - 1][1]
    deg[b] -= 1
    visited_edge[i - 1] = True
    if not deg[b]:
        deg_is_zero.add(b)
        dfs(deque([b]))
        if len(deg_is_zero) == N:
            print(i)
            exit()
0