Submission #1085302

#TimeUsernameProblemLanguageResultExecution timeMemory
1085302PepticBosses (BOI16_bosses)Cpython 3
0 / 100
11 ms2908 KiB
def calculate(x, y):
    s = 0
    for thing in tree[x+1][y]:
        s+= value[thing]
    return s


n = int(input())
boss= {}
for i in range(n):
    cur = list(map(int, input().split()))
    for d in range(cur[0]):
        if cur[d+1] not in boss:
            boss[cur[d+1]] = []
        boss[cur[d+1]].append(i+1)

order = [k for k,v in sorted(boss.items(), key=lambda item: -len(item[1]))]
seen = set([order[0]])
q = [order[0]]
tree = [[order[0]]]

while len(seen) != n:
    tree.append([])
    for i in range(len(q)):
        cur= q.pop(0)
        c = []
        for thing in boss[cur]:
            if thing not in seen:
                seen.add(thing)
                c.append(thing)
                q.append(thing)
        tree[-1].append(c)

value = {i+1:1 for i in range(n)}
# print(value)
# print(tree)
for i in reversed(range(n-2)):
    for d in range(len(tree[i])):
        # print(tree[i][d])
        if type(tree[i][d]) == list:
            for c in range(len(tree[i][d])):
                # print(tree[i][d][c], i , d, c)
                value[tree[i][d][c]]+= calculate(i, c)
        else:
            # print(tree[i][d], i, d)
            value[tree[i][d]]+= calculate(i,d)
    # print("break")
        # value[tree[-i-2][d]]+=calculate(n-i-2, d)
print(sum(value.values()))
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...