Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- #Si va
- def cuantostrange(c, newlist):
- sumaMax = 0
- for n in newlist:
- if c[n - 1] == 1:
- sumaMax = sumaMax + 1
- else:
- sumaMax = sumaMax - 1
- return abs(sumaMax)
- #No
- def cualhermano(lista, newlist):
- for i in lista:
- if not (i in newlist):
- return i
- return 0
- #Si
- def dfs(graph, start, visited=None):
- if visited is None:
- visited = set()
- visited.add(start)
- for next in set(graph[start]) - visited:
- dfs(graph, next, visited)
- return visited
- #Si
- def suma(lista):
- suma_temp = 0
- for y in lista[0]:
- if c[y-1] == 1:
- suma_temp = suma_temp + 1
- else:
- suma_temp = suma_temp - 1
- #print(y, suma_temp)
- return abs(suma_temp)
- #Si
- def bfs_paths(graph, start, goal):
- queue = [(start, [start])]
- while queue:
- (vertex, path) = queue.pop(0)
- for next in set(graph[vertex]) - set(path):
- if next == goal:
- yield path + [next]
- else:
- queue.append((next, path + [next]))
- def strangeness(i, listita, nuevalist):
- h = cualhermano(listita, nuevalist)
- if h == 0:
- return 0
- else:
- while (h not in nuevalist):
- nuevalist.append(h)
- sumaMax = cuantostrange(c, nuevalist) # extrañeza de 1-7
- h = cualhermano(listita, nuevalist)
- if h == 0:
- return 0
- nl2 = nuevalist
- nl2.append(h)
- return max(sumaMax, strangeness(h, lista[h - 1], nl2))
- n = int(input().strip())
- c = list(map(int, input().strip().split(' ')))
- sumaTot = 0
- lista = [[] for _ in range(n)]
- newlist = []
- caminoResultante = []
- diccionario = {}
- for a in range(n - 1):
- x, y = input().strip().split(' ')
- x, y = [int(x), int(y)]
- lista[x - 1].append(y)
- lista[y - 1].append(x)
- diccionario.update({x:lista[x - 1]})
- diccionario.update({y:lista[y - 1]})
- mayorStr = 0
- for i in range(n):
- newlist.append(i + 1)
- sumaMax = strangeness(i, lista[i], newlist)
- if sumaMax > mayorStr:
- mayorStr = sumaMax
- c1=0
- c2=1
- '''
- while c1 < n:
- print(bfs_paths(diccionario, c1, ))
- c1+=1
- '''
- for k in diccionario.keys():
- for j in range(1, n+1):
- if k != j:
- camino = (list(bfs_paths(diccionario, k, j)))
- sum_temp = suma(camino)
- if sumaTot < sum_temp:
- sumaTot = sum_temp
- caminoResultante = camino
- #print (j)
- print(sumaTot)
- print(len(caminoResultante[0]))
- print(*sorted(caminoResultante[0]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement