結果
| 問題 | No.2319 Friends+ |
| コンテスト | |
| ユーザー |
detteiuu
|
| 提出日時 | 2026-07-20 21:29:12 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,760 bytes |
| 記録 | |
| コンパイル時間 | 253 ms |
| コンパイル使用メモリ | 95,976 KB |
| 実行使用メモリ | 207,340 KB |
| 最終ジャッジ日時 | 2026-07-20 21:29:47 |
| 合計ジャッジ時間 | 20,896 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 43 WA * 1 TLE * 1 |
ソースコード
from sys import stdin
input = stdin.readline
from collections import defaultdict
shikii = 1000
def encode(a, b):
return a<<20|b
N, M = map(int, input().split())
P = list(map(int, input().split()))
AB = [list(map(int, input().split())) for _ in range(M)]
Q = int(input())
query = [list(map(int, input().split())) for _ in range(Q)]
# from random import randrange
# N = 20000
# M = 200000
# P = [randrange(1, N+1) for _ in range(N)]
# AB = []
# S = set()
# while len(AB) < M:
# A, B = randrange(1, N+1), randrange(1, N+1)
# if A > B: A, B = B, A
# if A == B: continue
# if (A, B) in S: continue
# AB.append((A, B))
# S.add((A, B))
# Q = 200000
# query = []
# S = set()
# while len(query) < Q:
# X, Y = randrange(1, N+1), randrange(1, N+1)
# if X == Y: continue
# if (X, Y) in S: continue
# query.append((X, Y))
# S.add((X, Y))
P = [p-1 for p in P]
G = [[] for _ in range(N)]
for A, B in AB:
A, B = A-1, B-1
G[A].append(B)
G[B].append(A)
big = [False]*N
for i in range(N):
big[i] = shikii <= len(G[i])
GB = [[] for _ in range(N)]
for n in range(N):
for v in G[n]:
if big[v]:
GB[n].append(v)
D = defaultdict(int)
for n in range(N):
if not big[n]: continue
for v in G[n]:
D[encode(n, P[v])] += 1
for X, Y in query:
X, Y = X-1, Y-1
Y = P[Y]
if P[X] == Y:
print("No")
continue
pre = P[X]
if big[X]:
if 1 <= D[encode(X, Y)]:
P[X] = Y
else:
for v in G[X]:
if P[v] == Y:
P[X] = Y
break
if P[X] == Y:
print("Yes")
else:
print("No")
for v in GB[X]:
D[encode(v, pre)] -= 1
D[encode(v, Y)] += 1
detteiuu