結果
問題 | No.1290 Addition and Subtraction Operation |
ユーザー |
![]() |
提出日時 | 2025-03-31 17:36:32 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 213 ms / 2,000 ms |
コード長 | 1,561 bytes |
コンパイル時間 | 249 ms |
コンパイル使用メモリ | 82,692 KB |
実行使用メモリ | 122,616 KB |
最終ジャッジ日時 | 2025-03-31 17:37:15 |
合計ジャッジ時間 | 11,128 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 85 |
ソースコード
import sysfrom collections import dequedef main():input = sys.stdin.read().split()ptr = 0N = int(input[ptr])ptr += 1M = int(input[ptr])ptr += 1B = list(map(int, input[ptr:ptr + N]))ptr += Nintervals = []for _ in range(M):L = int(input[ptr])R = int(input[ptr+1])intervals.append((L, R))ptr += 2# Compute t arrayt = [0] * (N + 2) # t[0..N+1], but j ranges from 1 to Nfor j in range(1, N + 1):t[j] = B[j - 1] * ((-1) ** j)# Compute delta arraydelta = [0] * (N + 2) # delta[1..N+1]for j in range(1, N + 1):delta[j] = t[j] - t[j - 1]delta[N + 1] = 0 - t[N]# Build adjacency listadj = [[] for _ in range(N + 2)] # nodes 1..N+1for L, R in intervals:u = Lv = R + 1adj[u].append(v)adj[v].append(u)visited = [False] * (N + 2)sum_ok = Truefor j in range(1, N + 2):if not visited[j]:q = deque()q.append(j)visited[j] = Truetotal = 0while q:node = q.popleft()total += delta[node]for neighbor in adj[node]:if not visited[neighbor]:visited[neighbor] = Trueq.append(neighbor)if total != 0:sum_ok = Falsebreakprint("YES" if sum_ok else "NO")if __name__ == "__main__":main()