#28568: 求解!自己測試可以但卻過不了


u11031107 (立波器)

學校 : 臺北市立麗山高級中學
編號 : 175270
來源 : [1.169.72.252]
最後登入時間 :
2023-10-22 20:52:04
b967. 4. 血緣關係 -- 2016年3月apcs | From: [1.34.205.12] | 發表日期 : 2021-12-17 20:46

def dfs(x):

        global child,blood_distance,bottom

        if x in bottom:

                return 0

        elif len(child[x])==1:

                

                blood_distance=max(dfs(child[x][0])+1,blood_distance)

                return dfs(child[x][0])+1

        else:

                firstmax=0

                secondmax=0

                for i in child[x]:

                        deep=dfs(i)+1

                        if deep>firstmax:

                                firstmax,deep=deep,firstmax

                        if deep>secondmax:

                                secondmax=deep

                blood_distance=max(firstmax+secondmax,blood_distance)

                return firstmax

while 1:

        x=int(input())

        child={}

        root=[]

        for m in range(x):

                root.append(m)

        bottom=[]

        for j in range(x):

                child[j]=[]

        for i in range(x-1):

                k= list(map(int,input().split()))

                child[k[0]].append(k[1])

        for k in child:

                if len(child[k])==0:

                        bottom.append(k)

                for i in child[k]:

                        root.remove(i)

        blood_distance=0

        dfs(root[0])

        print(blood_distance)

 

 

 

 

 

 

 

 

##print(child)

##print(bottom)

blood_distance=0

dfs(root[0])

print(blood_distance)

 

 
#28636: Re:求解!自己測試可以但卻過不了


u11031107 (立波器)

學校 : 臺北市立麗山高級中學
編號 : 175270
來源 : [1.169.72.252]
最後登入時間 :
2023-10-22 20:52:04
b967. 4. 血緣關係 -- 2016年3月apcs | From: [1.34.205.12] | 發表日期 : 2021-12-22 21:14

def dfs(x):

        global child,blood_distance,bottom

        if x in bottom:

                return 0

        elif len(child[x])==1:

                

                blood_distance=max(dfs(child[x][0])+1,blood_distance)

                return dfs(child[x][0])+1

        else:

                firstmax=0

                secondmax=0

                for i in child[x]:

                        deep=dfs(i)+1

                        if deep>firstmax:

                                firstmax,deep=deep,firstmax

                        if deep>secondmax:

                                secondmax=deep

                blood_distance=max(firstmax+secondmax,blood_distance)

                return firstmax

while 1:

        try:

          x=int(input())

          child={}

          root=[]

          for m in range(x):

                  root.append(m)

          bottom=[]

          for j in range(x):

                  child[j]=[]

          for i in range(x-1):

                  k= list(map(int,input().split()))

                  child[k[0]].append(k[1])

          for k in child:

                  if len(child[k])==0:

                          bottom.append(k)

                  for i in child[k]:

                          root.remove(i)

          blood_distance=0

          dfs(root[0])

          print(blood_distance)

        except:

                break

希望有人可以幫一下

 



 
ZeroJudge Forum