結果

問題 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
権限があれば一括ダウンロードができます

ソースコード

diff #

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)
                    
0