結果
問題 | No.994 ばらばらコイン |
ユーザー |
![]() |
提出日時 | 2025-03-20 20:32:44 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 333 ms / 2,000 ms |
コード長 | 1,661 bytes |
コンパイル時間 | 167 ms |
コンパイル使用メモリ | 82,444 KB |
実行使用メモリ | 111,748 KB |
最終ジャッジ日時 | 2025-03-20 20:33:40 |
合計ジャッジ時間 | 4,970 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 23 |
ソースコード
import sys from collections import deque def main(): sys.setrecursionlimit(1 << 25) input = sys.stdin.read().split() idx = 0 N, K = int(input[idx]), int(input[idx+1]) idx +=2 edges = [[] for _ in range(N+1)] for _ in range(N-1): a = int(input[idx]) b = int(input[idx+1]) edges[a].append(b) edges[b].append(a) idx +=2 if K > N: print(-1) return depth = [0]*(N+1) visited = [False]*(N+1) q = deque() q.append(1) visited[1] = True order = [] while q: u = q.popleft() order.append(u) for v in edges[u]: if not visited[v]: visited[v] = True depth[v] = depth[u] +1 q.append(v) selected = [False]*(N+1) for i in range(K): selected[order[i]] = True children = [[] for _ in range(N+1)] parent = [0]*(N+1) visited = [False]*(N+1) q = [1] visited[1] = True while q: u = q.pop() for v in edges[u]: if not visited[v]: visited[v] = True parent[v] = u children[u].append(v) q.append(v) has_selected = [False]*(N+1) def dfs(u): if selected[u]: has_selected[u] = True for v in children[u]: dfs(v) if has_selected[v]: has_selected[u] = True dfs(1) ans =0 for u in range(1, N+1): for v in children[u]: if has_selected[v]: ans +=1 print(ans) if __name__ == "__main__": main()