結果
問題 | No.2618 除霊 |
ユーザー | nikoro256 |
提出日時 | 2024-01-26 23:13:50 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 722 ms / 2,000 ms |
コード長 | 771 bytes |
コンパイル時間 | 173 ms |
コンパイル使用メモリ | 82,216 KB |
実行使用メモリ | 168,924 KB |
最終ジャッジ日時 | 2024-09-28 09:03:08 |
合計ジャッジ時間 | 23,597 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 43 |
ソースコード
import sys input=sys.stdin.readline N=int(input()) edge=[[] for _ in range(N)] for _ in range(N-1): a,b=map(int,input().split()) edge[a-1].append(b-1) edge[b-1].append(a-1) M=int(input()) count=[False]*N vtoinfect=[0]*(N) V=list(map(int,input().split())) V=set(V) for v in V: count[v-1]+=1 for e in edge[v-1]: count[e]+=1 for v in V: for e in edge[v-1]: if count[e]==1: vtoinfect[v-1]+=1 ans_one=N-count.count(0) is_obake=[int(i+1 in V) for i in range(N)] for i in range(N): sub=0 if count[i]>0: sub+=1 for e in edge[i]: if count[e]>0 and count[e]-is_obake[i]-is_obake[e]==0: sub+=1 if is_obake[e]==1: sub+=vtoinfect[e]-int(count[i]==1) print(ans_one-sub)