結果
問題 | No.1333 Squared Sum |
ユーザー |
![]() |
提出日時 | 2020-10-31 07:41:54 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 2,214 bytes |
コンパイル時間 | 337 ms |
コンパイル使用メモリ | 82,128 KB |
実行使用メモリ | 163,300 KB |
最終ジャッジ日時 | 2024-07-22 04:41:03 |
合計ジャッジ時間 | 57,870 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 29 TLE * 15 |
ソースコード
import sysreadline = sys.stdin.readlinedef decomposition(Edge, st = 0):N = len(Edge)bfsorder = [st]for i in range(N):vn = bfsorder[i]for vf in Edge[vn]:Edge[vf].remove(vn)bfsorder.extend(Edge[vn])sset = [0]*Nfor vn in bfsorder[::-1]:se = st = 0for vf in Edge[vn]:st |= sset[vf]&sese |= sset[vf]tmp = ~se & -(1<<st.bit_length())l = -tmp & tmpsset[vn] = (se|l) & -lreturn [(-l&l).bit_length()-1 for l in sset]MOD = 10**9+7N = int(readline())Edge = [[] for _ in range(N)]for _ in range(N-1):u, v, w = map(int, readline().split())u -= 1v -= 1Edge[u].append((v, w))Edge[v].append((u, w))levels = decomposition([[e[0] for e in ei] for ei in Edge])ans = 0size = [0]*Nds = [0]*Nds2 = [0]*Ndist = [0]*Ncolor = [0]*Nfor lv in range(max(levels), 0, -1):used = [0]*Nfor i in range(N):if levels[i] > lv:used[i] = 1for vn in range(N):if levels[vn] != lv:continueused[vn] = 1dsum = 0ssum = 0stack = []for vf, w in Edge[vn]:if used[vf]:continuecolor[vf] = vfssum += 1size[vf] = 1used[vf] = 1dist[vf] = wdsum = (dsum + w)%MODds[vf] = wds2[vf]= w*w%MODstack.append(vf)cs = stack[:]while stack:vn = stack.pop()for vf, w in Edge[vn]:if used[vf]:continueused[vf] = 1c = color[vn]color[vf] = cdist[vf] = (dist[vn] + w)%MODds[c] = (ds[c] + dist[vf])%MODdsum = (dsum + dist[vf])%MODds2[c] = (ds2[c] + dist[vf]*dist[vf])%MODsize[c] += 1ssum += 1stack.append(vf)ans = (ans + dsum*dsum)%MODfor r in cs:ans = (ans + ds2[r] + (ssum-size[r])*ds2[r] - ds[r]*ds[r])%MODprint(ans)