| Task: | Tietoverkko |
| Sender: | okkokko |
| Submission time: | 2021-10-12 20:16:45 +0300 |
| Language: | Python3 (CPython3) |
| Status: | READY |
| Result: | 25 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 10 |
| #2 | ACCEPTED | 15 |
| #3 | TIME LIMIT EXCEEDED | 0 |
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.03 s | 1, 2, 3 | details |
| #2 | ACCEPTED | 0.08 s | 2, 3 | details |
| #3 | TIME LIMIT EXCEEDED | -- | 3 | details |
Code
import collections
def GetInput(inp):
n = int(inp())
# out=collections.defaultdict(lambda:[])
out=[[] for i in range(n+1)]
for i in range(n-1):
# a = inp()
# c0,c1,c2=(int(b) for b in a.split())
c0,c1,c2=map(int,inp().split())
# out[c0][c1]=c2
# out[c1][c0]=c2
# c0,c1=sorted(c0,c1)
out[c0].append((c1,c2))
out[c1].append((c0,c2))
return out
# koneetD=collections.defaultdict(lambda:{})
# for i in range(1,n):
# yhteys = I[i]
# koneetD[yhteys[0]][yhteys[1]]=yhteys[2]
# koneetD[yhteys[1]][yhteys[0]]=yhteys[2]
# exampleInput="""4
# 1 2 5
# 2 3 1
# 2 4 2
# """
# exampleInput="""8
# 1 3 8
# 2 1 5
# 4 2 11
# 5 2 2
# 6 5 8
# 7 4 1
# 8 5 5
# """
import time
# with open('C:\\Users\\Okko Heiniö\\Desktop\\Koulu\\Vuosi 3\\Datatähti\\Eexample.txt','r') as fr:
# exampleInput=fr.read()
# pass
# ei = iter(exampleInput.splitlines())
# print(time.process_time())
# I=GetInput(ei.__next__)
# koneet=I
koneet=GetInput(input)
# print(time.process_time())
# print(koneet)
total=0
defa = collections.defaultdict(int)
from functools import reduce
def reducer(accumulator, element):
for key, value in element.items():
accumulator[key] = accumulator.get(key, 0) + value
return accumulator
def dict_sum(tests):
return reduce(reducer, tests, {})
# diag_haaraamount=defa.copy()
def Crossroads(kone,source,sourceSpeed):
# diag_haaraamount[len(koneet[kone])-1]+=1
if len(koneet[kone])<=1:
return {sourceSpeed:1}
# sourceSpeed = koneet[kone][source]
haarat=[]
addTotal=0
for ko_i,ko_i0 in koneet[kone]:
if ko_i != source:
haarat.append(Crossroads(ko_i,kone,ko_i0))
addTotal+=ko_i0
yhteydet=defa.copy()
yhteydet[sourceSpeed]=1
for c in haarat:
for j,multiplier in c.items():
a=min(j,sourceSpeed)
yhteydet[a]+=multiplier
addTotal+=multiplier*a
# for j,multiplier in yhteydet.items():
# addTotal+=multiplier*j
if len(haarat)>2:
addTotalHalf=0
yhtyhaara=dict_sum(haarat)
soY= sorted(yhtyhaara.keys())
ta=0
tb=sum(yhtyhaara.values())
# tb=0
# for i in soY:
# tb+= yhtyhaara[i]
for i in soY:
ta+= i*yhtyhaara[i]
tb-= yhtyhaara[i]
addTotalHalf+=(ta+tb*i)* yhtyhaara[i]
for j in range(len(haarat)):
h=haarat[j]
ta=0
# tb=0
soH=sorted(h.keys())
# for i in soH:
# tb+= h[i]
tb=sum(h.values())
for i in soH:
ta+= i*h[i]
tb-= h[i]
addTotalHalf-=(ta+tb*i)*h[i]
addTotal+=addTotalHalf//2
elif len(haarat)==2:
h0=haarat[0]
h1=haarat[1]
h1k=h1.keys()
# addTotal+=sum(sum(min(i,j)*h0[i]*h1[j] for j in h1k) for i in h0.keys())
for i in h0.keys():
ta=0
for j in h1k:
ta+=min(i,j)*h1[j]
addTotal+=ta*h0[i]
global total
total+=addTotal
# yhteydet = {siirtonopeus:määrä}
# addTotal = summaan lisättävä arvo joka tulee haaran välisistä yhteyksistä
return yhteydet
an = Crossroads(1,0,0)
# print(I)
# print(koneet)
# print(an)
# print(diag_haaraamount)
# print(time.process_time())
print(total)#-(10**9)
# print("980176904750134603 matches?")Test details
Test 1
Group: 1, 2, 3
Verdict: ACCEPTED
| input |
|---|
| 100 1 2 74 1 3 100 2 4 50 3 5 40 ... |
| correct output |
|---|
| 88687 |
| user output |
|---|
| 88687 |
Test 2
Group: 2, 3
Verdict: ACCEPTED
| input |
|---|
| 5000 1 2 613084013 1 3 832364259 2 4 411999902 3 5 989696303 ... |
| correct output |
|---|
| 1103702320243776 |
| user output |
|---|
| 1103702320243776 |
Test 3
Group: 3
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 200000 1 2 613084013 1 3 832364259 2 4 411999902 3 5 989696303 ... |
| correct output |
|---|
| 1080549209850010931 |
| user output |
|---|
| (empty) |
