#46375: 確定python可以過嗎?


hansjiang1017@gmail.com (可以出題了!!!!!!!!!!!!!!!)

學校 : 不指定學校
編號 : 278037
來源 : [111.242.104.111]
最後登入時間 :
2025-08-06 18:37:22

from collections import deque, defaultdict

n, m = map(int, input().split())
MAP = defaultdict(list)

for _ in range(m):
    a, b = map(int, input().split())
    MAP[a].append(b)

INF = int(1e9)
ans = INF
visited = [0] * (n + 1)

for start in range(1, n + 1):
    if visited[start]:
        continue
    
    length = [-1] * (n + 1)
    q = deque([start])
    length[start] = 0

    temp = [start]
    flag = 0
    break_out = 0

    while q and not break_out:
        u = q.popleft()
        for v in MAP[u]:
            temp.append(v)
            if length[v] == -1:
                length[v] = length[u] + 1
                q.append(v)
            elif v == start:
                ans = min(ans, length[u] + 1)
                flag = 1
                break_out = 1
                break

    if not flag:
        for t in temp:
            visited[t] = 1

print(ans if ans != INF else -1)
感覺已經很優化了(也有可能是我太菜)