Task: | Sadonkorjuu |
Sender: | okkokko |
Submission time: | 2022-11-05 02:17:35 +0200 |
Language: | Python3 (PyPy3) |
Status: | READY |
Result: | 33 |
group | verdict | score |
---|---|---|
#1 | ACCEPTED | 33 |
#2 | TIME LIMIT EXCEEDED | 0 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | ACCEPTED | 0.04 s | 1, 2 | details |
#2 | ACCEPTED | 0.04 s | 1, 2 | details |
#3 | ACCEPTED | 0.04 s | 1, 2 | details |
#4 | ACCEPTED | 0.05 s | 1, 2 | details |
#5 | ACCEPTED | 0.04 s | 1, 2 | details |
#6 | ACCEPTED | 0.10 s | 1, 2 | details |
#7 | ACCEPTED | 0.98 s | 2 | details |
#8 | ACCEPTED | 0.10 s | 1, 2 | details |
#9 | TIME LIMIT EXCEEDED | -- | 2 | details |
#10 | ACCEPTED | 0.10 s | 1, 2 | details |
#11 | ACCEPTED | 0.89 s | 2 | details |
#12 | ACCEPTED | 0.75 s | 2 | details |
#13 | ACCEPTED | 0.76 s | 2 | details |
#14 | ACCEPTED | 0.72 s | 2 | details |
#15 | ACCEPTED | 0.09 s | 1, 2 | details |
#16 | ACCEPTED | 0.09 s | 1, 2 | details |
#17 | ACCEPTED | 0.08 s | 1, 2 | details |
#18 | ACCEPTED | 0.10 s | 1, 2 | details |
#19 | ACCEPTED | 0.10 s | 1, 2 | details |
#20 | ACCEPTED | 0.10 s | 1, 2 | details |
#21 | ACCEPTED | 0.77 s | 2 | details |
#22 | ACCEPTED | 0.72 s | 2 | details |
#23 | ACCEPTED | 0.76 s | 2 | details |
#24 | ACCEPTED | 0.11 s | 1, 2 | details |
#25 | ACCEPTED | 0.73 s | 2 | details |
#26 | ACCEPTED | 0.10 s | 1, 2 | details |
#27 | ACCEPTED | 0.73 s | 2 | details |
#28 | ACCEPTED | 0.10 s | 1, 2 | details |
#29 | ACCEPTED | 0.72 s | 2 | details |
#30 | ACCEPTED | 0.10 s | 1, 2 | details |
#31 | ACCEPTED | 0.74 s | 2 | details |
Code
# test 1 succeeds import math import random def I(): return map(int, input().split()) a = """6 1 1 0 0 1 1 1 2 20 2 3 30 2 5 50 3 6 60 1 4 10 """.splitlines() # print(a) def generate_test(n: int): port_chance = 0.2 def text_gen(): yield str(n) random.seed(1001) yield " ".join(str(int(random.random() > port_chance)) for _ in range(n)) for i in range(2, n + 1): yield " ".join(map(str, (i, random.randrange(1, i), random.randint(1, 100)))) return text_gen().__next__ # input = iter(a).__next__ # input = generate_test(100) def main(): n, = I() cities = list(I()) connections = [dict() for _ in range(n)] for i in range(n - 1): a, b, c = I() connections[a - 1][b - 1] = c connections[b - 1][a - 1] = c head = Node(None, 0, math.inf, cities[0]) city = head head.form_children(cities, connections) while city is not None: new = city.next() if new is None: # city is the root, and has finished. break elif city.marker == 0: # new is city's parent distance = city.distance if new.closest > city.closest + distance: new.closest = city.closest + distance new.marker = 0 # resetting the node city = new else: # city is new's parent distance = new.distance if new.closest > city.closest + distance: new.closest = city.closest + distance city = new if not new.checked: city = new new.checked = True city.form_children(cities, connections) total = 0 city = head while city is not None: new = city.next() if not city.marker: total += city.closest city = new # print(head.view()) print(total) class Node: def __init__(self, parent: "Node|None", id: int, distance: float, city_type: bool): self.parent = parent # if parent is not None: # parent.children.append(self) self.children: list[Node] = [] self.distance = distance self.city_type = city_type self.id = id self.closest = math.inf if city_type else 0 self.formed_children = False self.checked = False def form_children(self, cities: "list[bool]", connections: "list[dict[int, float]]"): if self.formed_children: return for city_id, distance in connections[self.id].items(): if (not self.parent) or city_id != self.parent.id: self.children.append(Node(self, city_id, distance, cities[city_id])) self.marker = 0 self.formed_children = True def next(self): if self.marker < len(self.children): self.marker += 1 return self.children[self.marker - 1] self.marker = 0 return self.parent def confirm(self): assert all(self.closest <= c.closest + c.distance for c in self.children) assert self.parent is None or self.closest <= self.parent.closest + self.distance def view(self, indent: int = 0): out = "" out += " " * indent + f"{self.id}: {self.closest}, {self.distance}" + "\n" for c in self.children: out += c.view(indent + 4) return out main()
Test details
Test 1
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1 0 |
correct output |
---|
0 |
user output |
---|
0 |
Test 2
Group: 1, 2
Verdict: ACCEPTED
input |
---|
5 0 0 0 0 0 1 2 1 2 3 2 3 4 3 ... |
correct output |
---|
0 |
user output |
---|
0 |
Test 3
Group: 1, 2
Verdict: ACCEPTED
input |
---|
4 1 0 1 1 1 2 10 2 3 20 2 4 30 |
correct output |
---|
60 |
user output |
---|
60 |
Test 4
Group: 1, 2
Verdict: ACCEPTED
input |
---|
5 0 1 1 1 0 1 2 10 2 3 20 3 4 30 ... |
correct output |
---|
80 |
user output |
---|
80 |
Test 5
Group: 1, 2
Verdict: ACCEPTED
input |
---|
5 0 1 0 1 1 1 2 1 2 3 5 3 4 3 ... |
correct output |
---|
6 |
user output |
---|
6 |
Test 6
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
5506363 |
user output |
---|
5506363 |
Test 7
Group: 2
Verdict: ACCEPTED
input |
---|
200000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
1795118520 |
user output |
---|
1795118520 |
Test 8
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 0 0 1 0 1 1 0 1 0 1 1 0 0 0 1 ... |
correct output |
---|
293576 |
user output |
---|
293576 |
Test 9
Group: 2
Verdict: TIME LIMIT EXCEEDED
input |
---|
200000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
816932444 |
user output |
---|
(empty) |
Test 10
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... |
correct output |
---|
3089 |
user output |
---|
3089 |
Test 11
Group: 2
Verdict: ACCEPTED
input |
---|
200000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... |
correct output |
---|
40839 |
user output |
---|
40839 |
Test 12
Group: 2
Verdict: ACCEPTED
input |
---|
200000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
5683983203973 |
user output |
---|
5683983203973 |
Test 13
Group: 2
Verdict: ACCEPTED
input |
---|
200000 0 1 1 1 1 1 1 0 0 0 1 1 0 1 0 ... |
correct output |
---|
58572993 |
user output |
---|
58572993 |
Test 14
Group: 2
Verdict: ACCEPTED
input |
---|
200000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... |
correct output |
---|
32755 |
user output |
---|
32755 |
Test 15
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
126238345 |
user output |
---|
126238345 |
Test 16
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 0 0 0 1 0 1 1 1 0 0 1 0 1 1 0 ... |
correct output |
---|
278678 |
user output |
---|
278678 |
Test 17
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 ... |
correct output |
---|
34929 |
user output |
---|
34929 |
Test 18
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
1543963 |
user output |
---|
1543963 |
Test 19
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... |
correct output |
---|
39606 |
user output |
---|
39606 |
Test 20
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 1 0 1 0 1 0 0 0 0 1 1 0 0 0 1 ... |
correct output |
---|
321598 |
user output |
---|
321598 |
Test 21
Group: 2
Verdict: ACCEPTED
input |
---|
200000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
978670626 |
user output |
---|
978670626 |
Test 22
Group: 2
Verdict: ACCEPTED
input |
---|
200000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... |
correct output |
---|
375218 |
user output |
---|
375218 |
Test 23
Group: 2
Verdict: ACCEPTED
input |
---|
200000 1 1 1 1 0 0 0 0 0 1 0 1 0 1 1 ... |
correct output |
---|
60422556 |
user output |
---|
60422556 |
Test 24
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
291990 |
user output |
---|
291990 |
Test 25
Group: 2
Verdict: ACCEPTED
input |
---|
200000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
59607954 |
user output |
---|
59607954 |
Test 26
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
990 |
user output |
---|
990 |
Test 27
Group: 2
Verdict: ACCEPTED
input |
---|
200000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
199982 |
user output |
---|
199982 |
Test 28
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
7987 |
user output |
---|
7987 |
Test 29
Group: 2
Verdict: ACCEPTED
input |
---|
200000 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
3137875 |
user output |
---|
3137875 |
Test 30
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
4657693 |
user output |
---|
4657693 |
Test 31
Group: 2
Verdict: ACCEPTED
input |
---|
200000 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
1652889357 |
user output |
---|
1652889357 |