結果
| 問題 | No.1817 Reversed Edges | 
| コンテスト | |
| ユーザー |  titia | 
| 提出日時 | 2022-01-21 23:02:01 | 
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) | 
| 結果 | 
                                WA
                                 
                             | 
| 実行時間 | - | 
| コード長 | 1,273 bytes | 
| コンパイル時間 | 334 ms | 
| コンパイル使用メモリ | 12,672 KB | 
| 実行使用メモリ | 45,392 KB | 
| 最終ジャッジ日時 | 2024-11-26 02:23:57 | 
| 合計ジャッジ時間 | 14,828 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 2 | 
| other | AC * 5 WA * 18 | 
ソースコード
import sys
input = sys.stdin.readline
N=int(input())
E=[[] for i in range(N)]
for i in range(N-1):
    x,y=map(int,input().split())
    x-=1
    y-=1
    E[x].append(y)
    E[y].append(x)
    
ROOT=0
QUE=[ROOT] 
Parent=[-1]*N
Parent[ROOT]=N # ROOTの親を定めておく.
TOP_SORT=[] # トポロジカルソート
Child=[[] for i in range(N)]
while QUE: # トポロジカルソートと同時に親を見つける
    x=QUE.pop()
    TOP_SORT.append(x)
    for to in E[x]:
        if Parent[to]==-1:
            Parent[to]=x
            Child[x].append(to)
            QUE.append(to)
UP=[0]*N
DOWN=[0]*N
for x in TOP_SORT[::-1]:
    #print(x,Parent[x])
    if x==ROOT:
        k=0
    elif Parent[x]>x:
        k=1
    else:
        k=0
    
    for c in Child[x]:
        k+=UP[c]
    UP[x]=k
COMPOSE=[0]*N
for i in range(N):
    k=0
    for c in Child[i]:
        k+=UP[c]
    COMPOSE[i]=k
for x in TOP_SORT:
    #print(x)
    if x==ROOT:
        DOWN[x]=0
        continue
    p=Parent[x]
    if x>p:
        DOWN[x]=1+DOWN[p]+UP[p]-UP[x]
    else:
        DOWN[x]=DOWN[p]+UP[p]-UP[x]
ANS=[0]*N
# iをROOTとしたときの値は、
# for c in Child[i]についてのUP[c]とDOWN[i]から求められる。
for i in range(N):
    print(DOWN[i]+COMPOSE[i])
            
            
            
        