結果
| 問題 |
No.1640 簡単な色塗り
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-15 21:40:25 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 284 ms / 2,000 ms |
| コード長 | 2,412 bytes |
| コンパイル時間 | 257 ms |
| コンパイル使用メモリ | 82,364 KB |
| 実行使用メモリ | 96,636 KB |
| 最終ジャッジ日時 | 2025-04-15 21:42:57 |
| 合計ジャッジ時間 | 15,892 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 51 WA * 2 |
ソースコード
import sys
from collections import deque
def main():
N = int(sys.stdin.readline())
edges = []
for _ in range(N):
a, b = map(int, sys.stdin.readline().split())
edges.append((a-1, b-1)) # Convert to 0-based indices
# Check if all vertices appear at least once
present = [False] * N
for a, b in edges:
present[a] = True
present[b] = True
if not all(present):
print("No")
return
# Build edge lists for each vertex
edge_lists = [[] for _ in range(N)]
for i, (a, b) in enumerate(edges):
edge_lists[a].append(i)
edge_lists[b].append(i)
# Calculate degrees
degree = [len(lst) for lst in edge_lists]
# Initialize queue with degree 1 vertices
q = deque()
for v in range(N):
if degree[v] == 1:
q.append(v)
processed_edges = [False] * N
choices = [0] * N
used = [False] * N
# Process degree 1 vertices
while q:
v = q.popleft()
# Find the unprocessed edge for v
edge_found = -1
for e in edge_lists[v]:
if not processed_edges[e]:
edge_found = e
break
if edge_found == -1:
print("No")
return
a, b = edges[edge_found]
# Determine which one is v
selected = v
processed_edges[edge_found] = True
choices[edge_found] = selected + 1 # Convert back to 1-based
used[selected] = True
# Get the other vertex
other = a if selected != a else b
# Decrease degree of other
degree[other] -= 1
if degree[other] == 0:
print("No")
return
if degree[other] == 1:
q.append(other)
# Process remaining edges
for i in range(N):
if not processed_edges[i]:
a, b = edges[i]
# Choose the one not used yet
if not used[a]:
selected = a
elif not used[b]:
selected = b
else:
# Both are used, choose arbitrarily (A)
selected = a
choices[i] = selected + 1
used[selected] = True
# Final check
if all(used):
print("Yes")
for c in choices:
print(c)
else:
print("No")
if __name__ == "__main__":
main()
lam6er