結果
問題 | No.274 The Wall |
ユーザー |
![]() |
提出日時 | 2025-03-26 15:48:33 |
言語 | PyPy3 (7.3.15) |
結果 |
MLE
|
実行時間 | - |
コード長 | 3,651 bytes |
コンパイル時間 | 1,175 ms |
コンパイル使用メモリ | 82,360 KB |
実行使用メモリ | 856,276 KB |
最終ジャッジ日時 | 2025-03-26 15:49:31 |
合計ジャッジ時間 | 6,714 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 8 MLE * 1 -- * 14 |
ソースコード
import syssys.setrecursionlimit(1 << 25)def main():import sysinput = sys.stdin.read().split()ptr = 0N = int(input[ptr])ptr += 1M = int(input[ptr])ptr += 1blocks = []for _ in range(N):L = int(input[ptr])ptr += 1R = int(input[ptr])ptr += 1o_l, o_r = L, Rf_l = (M - 1) - Rf_r = (M - 1) - Lblocks.append(((o_l, o_r), (f_l, f_r)))size = 2 * Noriginal_graph = [[] for _ in range(2 * N)]transposed_graph = [[] for _ in range(2 * N)]def overlaps(a1, a2, b1, b2):return a1 <= b2 and b1 <= a2for i in range(N):for j in range(i + 1, N):o_i = blocks[i][0]f_i = blocks[i][1]o_j = blocks[j][0]f_j = blocks[j][1]# Case 1: o_i and o_jif overlaps(o_i[0], o_i[1], o_j[0], o_j[1]):u = 2 * iv = 2 * j + 1original_graph[u].append(v)transposed_graph[v].append(u)u = 2 * jv = 2 * i + 1original_graph[u].append(v)transposed_graph[v].append(u)# Case 2: o_i and f_jif overlaps(o_i[0], o_i[1], f_j[0], f_j[1]):u = 2 * iv = 2 * joriginal_graph[u].append(v)transposed_graph[v].append(u)u = 2 * j + 1v = 2 * i + 1original_graph[u].append(v)transposed_graph[v].append(u)# Case 3: f_i and o_jif overlaps(f_i[0], f_i[1], o_j[0], o_j[1]):u = 2 * i + 1v = 2 * j + 1original_graph[u].append(v)transposed_graph[v].append(u)u = 2 * jv = 2 * ioriginal_graph[u].append(v)transposed_graph[v].append(u)# Case 4: f_i and f_jif overlaps(f_i[0], f_i[1], f_j[0], f_j[1]):u = 2 * i + 1v = 2 * joriginal_graph[u].append(v)transposed_graph[v].append(u)u = 2 * j + 1v = 2 * ioriginal_graph[u].append(v)transposed_graph[v].append(u)visited = [False] * (2 * N)order = []for u in range(2 * N):if not visited[u]:stack = [(u, False)]while stack:node, processed = stack.pop()if processed:order.append(node)continueif visited[node]:continuevisited[node] = Truestack.append((node, True))for v in original_graph[node]:if not visited[v]:stack.append((v, False))visited = [False] * (2 * N)component = [0] * (2 * N)current = 0for node in reversed(order):if not visited[node]:stack = [node]visited[node] = Truewhile stack:u = stack.pop()component[u] = currentfor v in transposed_graph[u]:if not visited[v]:visited[v] = Truestack.append(v)current += 1possible = Truefor i in range(N):if component[2 * i] == component[2 * i + 1]:possible = Falsebreakprint("YES" if possible else "NO")if __name__ == "__main__":main()