結果
| 問題 |
No.1488 Max Score of the Tree
|
| コンテスト | |
| ユーザー |
ygd.
|
| 提出日時 | 2021-04-23 22:26:50 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,842 bytes |
| コンパイル時間 | 151 ms |
| コンパイル使用メモリ | 82,468 KB |
| 実行使用メモリ | 76,768 KB |
| 最終ジャッジ日時 | 2024-07-04 08:17:24 |
| 合計ジャッジ時間 | 3,233 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 3 WA * 26 |
ソースコード
N,K = map(int,input().split())
G = [[] for _ in range(N)]
RN = [[-1]*N for _ in range(N)]
for i in range(N-1):
a,b,c = map(int,input().split())
a-=1;b-=1 #0-index
G[a].append((b,c,i)) #相手、cost, index
G[b].append((a,c,i))
RN[a][b] = (i,c)
RN[b][a] = (i,c)
#print(RN)
leaf = [0]*N
par = [-1]*N
stack = []
stack.append(~0)
stack.append(0)
while stack:
v = stack.pop()
if v >= 0:
for u,cost,idx in G[v]:
if u == par[v]: continue
par[u] = v
stack.append(~u)
stack.append(u)
else:
a = ~v
if a == 0: continue
if len(G[a]) == 1:
leaf[a] = 1
leaf[par[a]] += 1
else:
#print(a,par[a],"L",leaf[a])
leaf[par[a]] += leaf[a]
#print(par)
#print(leaf)
ans = 0
for i in range(N):
npar = [-1]*N
stack = [i]
while stack:
v = stack.pop()
for u,cost,idx in G[v]:
if u == npar[v]: continue
npar[u] = v
stack.append(u)
#print(i,npar)
for j in range(i+1,N):
cum = 0
nj = j
used = [0]*(N-1)
Flag = 0
while npar[nj] != -1:
nxt = npar[nj]
idx, cost = RN[nj][nxt]
used[idx] = 1
cum += cost
nj = nxt
if cum > K:
Flag = 1
break
if Flag == 1: continue
ret = 0
stack = [0]
while stack:
v = stack.pop()
for u,cost,idx in G[v]:
if u == par[v]: continue
if used[idx] == 1:
ret += cost*leaf[u]*2
else:
ret += cost*leaf[u]
stack.append(u)
#print(i,j,ret,used)
ans = max(ans,ret)
print(ans)
ygd.