結果
問題 | No.1333 Squared Sum |
ユーザー |
![]() |
提出日時 | 2022-11-07 16:37:38 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,977 ms / 2,000 ms |
コード長 | 1,873 bytes |
コンパイル時間 | 252 ms |
コンパイル使用メモリ | 82,048 KB |
実行使用メモリ | 247,632 KB |
最終ジャッジ日時 | 2024-07-21 00:13:37 |
合計ジャッジ時間 | 52,175 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 44 |
ソースコード
def rerooting():dp=[[E]*len(edge[v]) for v in range(n)]# dfs1memo=[E]*nfor v in order[::-1]:res=Efor i in range(len(edge[v])):if edge[v][i]==par[v]:continuedp[v][i]=memo[edge[v][i]]res=merge(res,f(dp[v][i],edge[v][i],v))memo[v]=g(res,v)# dfs2memo2=[E]*nfor v in order:for i in range(len(edge[v])):if edge[v][i]==par[v]:dp[v][i]=memo2[v]s=len(edge[v])cumR=[E]*(s+1)cumR[s]=Efor i in range(s,0,-1):cumR[i-1]=merge(cumR[i],f(dp[v][i-1],v,edge[v][i-1]))cumL=Efor i in range(s):if edge[v][i]!=par[v]:val=val=merge(cumL,cumR[i+1])memo2[edge[v][i]]=g(val,v)cumL=merge(cumL,f(dp[v][i],edge[v][i],v))ans=[E for i in range(n)]for v in range(n):res=Efor i in range(len(edge[v])):res=merge(res,f(dp[v][i],edge[v][i],v))ans[v]=g(res,v)#ans[v]=calc_ans(res,v)return ansE=(0,0,0)mod=10**9+7def f(res,v,u):a,b,c=resw=weight[v+(u<<20)]a+=2*w*b+c*w%mod*wa%=modb+=c*wb%=modreturn (a,b,c)def g(res,v):a,b,c=resreturn (a,b,c+1)def merge(a,b):xa,ya,za=axb,yb,zb=breturn ((xa+xb)%mod,(ya+yb)%mod,za+zb)'''def calc_ans(res,v):return'''from sys import stdininput=lambda :stdin.readline()[:-1]weight={}n=int(input())edge=[[] for i in range(n)]for i in range(n-1):x,y,w=map(int,input().split())x,y=x-1,y-1edge[x].append(y)edge[y].append(x)weight[x+(y<<20)]=wweight[y+(x<<20)]=w# make order table# root = 0from collections import dequeorder=[]par=[-1]*ntodo=deque([0])while todo:v=todo.popleft()order.append(v)for u in edge[v]:if u!=par[v]:par[u]=vtodo.append(u)ans=rerooting()res=0for i in ans:res+=i[0]res%=modres*=pow(2,mod-2,mod)print(res%mod)