結果
問題 | No.2584 The University of Tree |
ユーザー |
|
提出日時 | 2023-11-27 21:22:19 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,750 ms / 3,000 ms |
コード長 | 1,868 bytes |
コンパイル時間 | 381 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 261,812 KB |
最終ジャッジ日時 | 2024-09-27 04:42:08 |
合計ジャッジ時間 | 39,751 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 53 |
ソースコード
from collections import dequeMOD=998244353N=int(input())gr=[]road=[[] for i in range(N-1)]for i in range(N):C,*E=list(map(int,input().split()))gr.append(E)for j in E:road[j-1].append(i)ser=[{} for i in range(N)]for i in range(N):for j,k in enumerate(gr[i]):if road[k-1][0]==i:gr[i][j]=road[k-1][1]else:gr[i][j]=road[k-1][0]ser[i][gr[i][j]]=jdp=[[-1]*len(gr[i]) for i in range(N)]top=[]vert=deque([(0,0,-1)])while len(vert)>0:st,pos,bef=vert.pop()if st==0:top.append(pos)vert.append((1,pos,bef))for i in gr[pos]:if i!=bef:vert.append((0,i,pos))else:if bef==-1:continueprod=pos+1ret=0for i in range(ser[pos][bef]+1,len(gr[pos])):ret+=dp[pos][ser[pos][gr[pos][i]]]*prodprod*=pos+1ret%=MODprod%=MODret+=prodprod*=pos+1for i in range(ser[pos][bef]):ret+=dp[pos][ser[pos][gr[pos][i]]]*prodprod*=pos+1ret%=MODprod%=MODdp[bef][ser[bef][pos]]=retfor i in top:lf=[0]ri=[0]rev=pow(i+1,-1,MOD)prod=i+1for j in dp[i]:lf.append(lf[-1]+j*prod)prod*=i+1prod%=MODlf[-1]%=MODprod=revfor j in reversed(dp[i]):ri.append(ri[-1]+j*prod)prod*=revprod%=MODri[-1]%=MODcul=-2cur=0prod=i+1for j in reversed(gr[i]):dp[j][ser[j][i]]=prod+(lf[cul]+ri[cur])*proddp[j][ser[j][i]]%=MODprod*=i+1prod%=MODcur+=1cul-=1for i in range(N):ans=0prod=i+1for j in dp[i]:ans+=j*prodans%=MODprod*=i+1prod%=MODprint(ans)