結果
| 問題 | No.1424 Ultrapalindrome |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-03-13 12:58:00 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,194 bytes |
| 記録 | |
| コンパイル時間 | 238 ms |
| コンパイル使用メモリ | 82,432 KB |
| 実行使用メモリ | 115,108 KB |
| 最終ジャッジ日時 | 2024-10-15 05:17:20 |
| 合計ジャッジ時間 | 5,704 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 25 WA * 4 |
ソースコード
def dfs(N, adj, root):
stack = [root]
parent = [-1] * N
parent[root] = root
depth = [0] * N
while stack:
v = stack.pop()
for nv in adj[v]:
if parent[nv] == -1:
parent[nv] = v
depth[nv] = depth[v] + 1
stack.append(nv)
return parent, depth
def main():
N = int(input())
adj = [[] for _ in range(N)]
for _ in range(N - 1):
u, v = map(int, input().split())
u -= 1; v -= 1
adj[u].append(v)
adj[v].append(u)
_, depth_0 = dfs(N, adj, 0)
root = max(range(N), key=lambda i: depth_0[i])
parent, depth = dfs(N, adj, root)
dist = max(depth)
leaves = [v for v in range(N) if len(adj[v]) == 1]
if dist % 2 == 1:
if len(leaves) == 2:
print("Yes")
else:
print("No")
else:
end = max(range(N), key=lambda i: depth[i])
cent = end
for _ in range(dist // 2):
cent = parent[cent]
_, dists = dfs(N, adj, cent)
for l in leaves:
if dists[l] != dist // 2:
print("No")
exit()
print("Yes")
main()