Python kodu yorumlama

pWrist

Decapat
Katılım
17 Kasım 2020
Mesajlar
98
Çözümler
1
Daha fazla  
Cinsiyet
Erkek
Python:
N = 200005

n = 0
k = 0
l = 0
ans = -(2 ** 31)
a = [0 for x in range(N)]
u = [0 for x in range(N)]
v = [0 for x in range(N)]

# g = [[]] * N
g = [[] for x in range(N)]
pre = [[] for x in range(N)]
yer = [{} for x in range(N)]

n, l, k = [int(x) for x in input().split()]
a[1:n + 1] = [int(x) for x in input().split()]

for i in range(1, n):
    u[i], v[i] = [int(x) for x in input().split()]

    vyer = len(g[u[i]])
    uyer = len(g[v[i]])

    g[u[i]].append([a[v[i]], [v[i], uyer]])
    g[v[i]].append([a[u[i]], [u[i], vyer]])

for i in range(1, n + 1):
    # sorted(g[i], reverse=True)
    sorted(g[i])
    g[i].reverse()

for i in range(1, n + 1):
    for j in range(len(g[i])):
        yer[g[i][j][1][0]][i] = j

for i in range(1, n + 1):
    ans = max(ans, a[i])

if k == 1:
    print(ans)
    exit()

for i in range(1, n + 1):
    mx = 0
    top = 0

    for j in range(len(g[i])):
        top += g[i][j][0]
        mx = max(mx, top)
        pre[i].append(mx)

for i in range(1, n + 1):
    top = a[i]
    ans = max(ans, top)

    for j in range(min(k - 1, len(g[i]))):
        top += g[i][j][0]
        ans = max(ans, top)

    ans = max(ans, top)

if l == 3:
    for i in range(1, n):
        top = a[u[i]] + a[v[i]]
        ans = max(ans, top)
        geldi = 0

        if len(g[u[i]]) < len(g[v[i]]):
            uyer = yer[u[i]][v[i]]

            for j in range(min(k - 2, len(g[u[i]]))):
                if g[u[i]][j][1][0] == v[i]:
                    geldi = 1
                    j += 1
                    continue

                bak = k - (j - geldi + 1 + 2) - 1
                ek = 0

                if bak >= 0:
                    if bak >= uyer:
                        if a[u[i]] < 0:
                            if uyer >= 1:
                                ek = pre[v[i]][uyer - 1]
                        else:
                            ek = pre[v[i]][min(
                                bak + 1, len(pre[v[i]]) - 1)] - a[u[i]]
                    else:
                        ek = pre[v[i]][min(bak, len(pre[v[i]]) - 1)]

                top += g[u[i]][j][0]
                ans = max(ans, top + ek)
        else:
            vyer = yer[v[i]][u[i]]

            for j in range(min(k - 2, len(g[v[i]]))):
                if g[v[i]][j][1][0] == u[i]:
                    geldi = 1
                    j += 1
                    continue

                bak = k - (j - geldi + 1 + 2) - 1
                ek = 0

                if bak >= 0:
                    if bak  >= vyer:
                        if a[v[i]] < 0:
                            ek = pre[u[i]][vyer - 1]
                        else:
                            ek = pre[u[i]][min(
                                bak + 1, len(pre[u[i]]) - 1)] - a[v[i]]
                    else:
                        ek = pre[u[i]][min(bak, len(pre[u[i]]) - 1)]

                top += g[v[i]][j][0]
                ans = max(ans, top + ek)

print(ans)
Verdiğim kodun yorumlanması lazım yardımcı olursanız sevinirim.
 
Çalmak pek yazılımcıların kullandığı bi tabir değildir gerçi.
Çalmış ama. Çaldığı yeri okusa böyle bir konu açmazdı.

Kodun orijinal hali o kadar iğrenç ki yazan kişinin bile bugün anlatabileceğini sanmıyorum.
Bunu anlayıp sonra da anlatmaya çalışacak biri olduğunu sanmıyorum. Maaş versen değmez.

Diğer konuyu açan kişi olduğunuzu şimdi fark ettim. Yaptığınız daha beter.
Orijinal halini anlamak Python halini anlamaktan daha kolay olacaktır. Uğraşacak varsa nispeten daha okunaklı hali olan C++ versiyonuna baksın.
 
Ben ömrüm hayatımda kod yazmadım. Projeyi dersi yapamadığım için aldım hoca da böyle bişey verdi. Ben nerden bileyim zor bişey vereceğini.
 
Ben ömrüm hayatımda kod yazmadım. Projeyi dersi yapamadığım için aldım hoca da böyle bişey verdi. Ben nerden bileyim zor bişey vereceğini.
Yazmazsan, denemezsen nasıl öğrenesin ki? Proje ödevini de bir hafta bir ay gibi bir süre için vermezler genelde. Neredeyse 2-3 ay süren olur. 2-3 ayda böyle bir şeyi çözebilecek kadar programlama öğrenmek imkansız değil. Çok sıkı bir çalışmaya da gerek olmaz. Ama işte tembellik.
 
Maalesef hepiniz beni kınadıkça sadece ne kadar mal olduğumu hatırlatıyorsunuz teşekküğrle.
 

Geri
Yukarı