結果
| 問題 |
No.2464 To DAG
|
| コンテスト | |
| ユーザー |
mymelochan
|
| 提出日時 | 2023-09-08 22:44:31 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 785 ms / 2,000 ms |
| コード長 | 1,539 bytes |
| コンパイル時間 | 242 ms |
| コンパイル使用メモリ | 82,432 KB |
| 実行使用メモリ | 142,080 KB |
| 最終ジャッジ日時 | 2024-06-26 15:59:03 |
| 合計ジャッジ時間 | 24,704 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 39 |
ソースコード
#############################################################
import sys
sys.setrecursionlimit(10**7)
from heapq import heappop,heappush
from collections import deque,defaultdict,Counter
from bisect import bisect_left, bisect_right
from itertools import product,combinations,permutations
ipt = sys.stdin.readline
def iin():
return int(ipt())
def lmin():
return list(map(int,ipt().split()))
MOD = 998244353
#############################################################
N,M = lmin()
ans = [[] for _ in range(N)]
G = [[] for _ in range(N)]
for _ in range(M):
u,v = lmin()
u,v = u-1,v-1
G[u].append(v)
f = [0]*N
for i in range(N):
if len(G[i]) == 0:
continue
cur = i
E = []
f[cur] = 1
while True:
#print(cur,E,G)
#print(f)
if not G[cur]:
if not E:
break
else:
u,v = E.pop()
ans[u].append(v)
f[cur] = 0
cur = u
else:
nxt = G[cur].pop()
if f[nxt]:
tmp = cur
f[cur] = 0
while True:
u,v = E.pop()
tmp = u
if tmp == nxt:
break
f[tmp] = 0
cur = tmp
else:
f[nxt] = 1
E.append((cur,nxt))
cur = nxt
f[i] = 0
print(N,sum(len(g) for g in ans))
for i in range(N):
for j in ans[i]:
print(i+1,j+1)
mymelochan