結果
問題 | No.1865 Make Cycle |
ユーザー |
|
提出日時 | 2022-03-04 22:34:05 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 629 ms / 3,000 ms |
コード長 | 1,578 bytes |
コンパイル時間 | 249 ms |
コンパイル使用メモリ | 82,432 KB |
実行使用メモリ | 108,936 KB |
最終ジャッジ日時 | 2024-11-24 12:21:06 |
合計ジャッジ時間 | 11,788 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 20 |
ソースコード
import sysint1 = lambda x: int(x) - 1# input = lambda: sys.stdin.buffer.readline()input = lambda: sys.stdin.readline().rstrip()ii = lambda: int(input())i1 = lambda: int1(input())mi = lambda: map(int, input().split())mi1 = lambda: map(int1, input().split())li = lambda: list(mi())li1 = lambda: list(mi1())lli = lambda n: [li() for _ in range(n)]INF = float("inf")mod = int(1e9 + 7)# mod = 998244353n, q = mi()g = [list() for i in range(n)]for i in range(q):a, b = mi1()g[a].append((b, i))ok = -1ng = qwhile ng - ok > 1:mid = ok + ng >> 1flag = False# checkf = [-1] * nidx = [0] * nst = []for i in range(n):if f[i] != -1:continuest.append(i)while st:cur = st.pop()if idx[cur] == 0:f[cur] = iwhile idx[cur] < len(g[cur]) and g[cur][idx[cur]][1] > mid:idx[cur] += 1if idx[cur] == len(g[cur]):f[cur] = -2else:to = g[cur][idx[cur]][0]if f[to] == i:flag = Truest = []breakelif f[to] == -1:st.append(cur)st.append(to)idx[cur] += 1elif f[to] == -2:st.append(cur)idx[cur] += 1if flag:break#if flag:ng = midelse:ok = midif ng == q:print(-1)else:print(ng + 1)