結果
| 問題 |
No.439 チワワのなる木
|
| ユーザー |
|
| 提出日時 | 2021-07-10 09:05:32 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 972 bytes |
| コンパイル時間 | 127 ms |
| コンパイル使用メモリ | 12,928 KB |
| 実行使用メモリ | 37,504 KB |
| 最終ジャッジ日時 | 2024-07-02 01:42:52 |
| 合計ジャッジ時間 | 6,236 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 11 WA * 17 |
ソースコード
import sys
from collections import deque
input = sys.stdin.readline
N = int(input())
S = input()
T = [[] for _ in range(N)]
for _ in range(N - 1):
a, b = (int(x) - 1 for x in input().split())
T[a].append(b)
T[b].append(a)
# dfs
dfs_order = []
parent = [None] * N
d = deque([0])
nonvisited = [True] * N
nonvisited[0] = False
while d:
v = d.pop()
dfs_order.append(v)
for x in T[v]:
if nonvisited[x]:
d.append(x)
parent[x] = v
nonvisited[x] = False
Csum, Wsum = S.count('c'), S.count('w')
# 子から親へ
C, W = [0] * N, [0] * N
ans = 0
for v in reversed(dfs_order):
for child in T[v]:
if child == parent[v]:
continue
C[v] += C[child]
W[v] += W[child]
if S[child] == 'c':
C[v] += 1
else: # S[child] == 'w'
W[v] += 1
if S[v] == 'w': # c[w]w
ans += C[v] * (Wsum - W[v] - 1) + W[v] * (Csum - C[v])
print(ans)