結果
| 問題 |
No.1373 Directed Operations
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-09 21:05:13 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,147 bytes |
| コンパイル時間 | 175 ms |
| コンパイル使用メモリ | 82,164 KB |
| 実行使用メモリ | 97,492 KB |
| 最終ジャッジ日時 | 2025-04-09 21:06:54 |
| 合計ジャッジ時間 | 4,079 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 18 RE * 1 |
ソースコード
class DSU:
def __init__(self, size):
self.parent = list(range(size + 2)) # parent[0] unused, size+1 to avoid boundary checks
def find(self, m):
if self.parent[m] != m:
self.parent[m] = self.find(self.parent[m])
return self.parent[m]
def union(self, m):
self.parent[m] = self.find(m + 1)
def main():
import sys
input = sys.stdin.read
data = input().split()
n = int(data[0])
a_list = list(map(int, data[1:n]))
if n == 1:
print("YES")
return
dsu = DSU(n-1)
answer = []
for a in a_list:
m_start = max(a, 1)
current_m = dsu.find(m_start)
if current_m <= n-1:
x = (current_m + 1) - a
answer.append(x)
dsu.union(current_m)
else:
# Choose x=1 if possible, else x = N - a (as required)
x = 1 if 1 + a <= n else n - a
answer.append(x)
# Check if all m are covered
if dsu.find(1) > n-1:
print("YES")
print('\n'.join(map(str, answer)))
else:
print("NO")
if __name__ == "__main__":
main()
lam6er