test/1L.py
2026-07-01 19:46:51 +03:00

46 lines
No EOL
1.1 KiB
Python

import sys
input = sys.stdin.readline
line = input().split()
if not line:
sys.exit()
n, m = map(int, line)
g = [[] for _ in range(n + 1)]
gr = [[] for _ in range(n + 1)]
for _ in range(m):
u, v = map(int, input().split())
g[u].append(v)
gr[v].append(u)
used = [0] * (n + 1)
order = []
head = [0] * (n + 1)
for i in range(1, n + 1):
if not used[i]:
stack = [i]
used[i] = 1
while stack:
v = stack[-1]
if head[v] < len(g[v]):
to = g[v][head[v]]
head[v] += 1
if not used[to]:
used[to] = 1
stack.append(to)
else:
stack.pop()
order.append(v)
used = [0] * (n + 1)
ans = 0
for i in reversed(order):
if not used[i]:
stack = [i]
used[i] = 1
size = 0
while stack:
v = stack.pop()
size += 1
for to in gr[v]:
if not used[to]:
used[to] = 1
stack.append(to)
ans += min(size, 2)
print(ans)