data structures dfs and similar graphs greedy implementation trees *2000

Please click on ads to support us..

Python Code:

import sys
input = sys.stdin.readline

def readList():
    return list(map(int, input().split()))
def readInt():
    return int(input())
def readInts():
    return map(int, input().split())
def readStr():
    return input().strip()

def solve():
    n, A, B = readInt(), readList(), readList()
    graph = [[] for _ in range(n)]
    par = [-1] * n
    for i in range(n):
        if B[i] != -1:
            graph[B[i]-1].append(i)
            par[i] = B[i]-1

    now, after = [], []
    for i in range(n):
        if B[i] == -1:
            st = [(i, 0)]
            while st:
                node, exp = st.pop()
                if exp:
                    if node == i:
                        now.append(node+1)
                        continue
                    if A[node] >= 0:
                        A[par[node]] += A[node]
                        now.append(node+1)
                    else:
                        after.append(node+1)
                else:
                    st.append((node, 1))
                    for nei in graph[node]:
                        st.append((nei, 0))
    print(sum(A))
    print(*(now + after[::-1]))
    return

solve()


Comments

Submit
0 Comments
More Questions

746A - Compote
318A - Even Odds
550B - Preparing Olympiad
939B - Hamster Farm
732A - Buy a Shovel
1220C - Substring Game in the Lesson
452A - Eevee
1647B - Madoka and the Elegant Gift
1408A - Circle Coloring
766B - Mahmoud and a Triangle
1618C - Paint the Array
469A - I Wanna Be the Guy
1294A - Collecting Coins
1227A - Math Problem
349A - Cinema Line
47A - Triangular numbers
1516B - AGAGA XOOORRR
1515A - Phoenix and Gold
1515B - Phoenix and Puzzle
155A - I_love_username
49A - Sleuth
1541A - Pretty Permutations
1632C - Strange Test
673A - Bear and Game
276A - Lunch Rush
1205A - Almost Equal
1020B - Badge
1353A - Most Unstable Array
770A - New Password
1646B - Quality vs Quantity