Advertisement
Guest User

Untitled

a guest
Oct 4th, 2017
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import math
  2. #Si va
  3. def cuantostrange(c, newlist):
  4.     sumaMax = 0
  5.     for n in newlist:
  6.         if c[n - 1] == 1:
  7.             sumaMax = sumaMax + 1
  8.         else:
  9.             sumaMax = sumaMax - 1
  10.  
  11.     return abs(sumaMax)
  12.  
  13. #No
  14. def cualhermano(lista, newlist):
  15.     for i in lista:
  16.         if not (i in newlist):
  17.             return i
  18.         return 0
  19.  
  20. #Si
  21. def dfs(graph, start, visited=None):
  22.     if visited is None:
  23.         visited = set()
  24.     visited.add(start)
  25.     for next in set(graph[start]) - visited:
  26.         dfs(graph, next, visited)
  27.     return visited
  28. #Si
  29. def suma(lista):
  30.     suma_temp = 0
  31.     for y in lista[0]:
  32.         if c[y-1] == 1:
  33.             suma_temp = suma_temp + 1
  34.         else:
  35.             suma_temp = suma_temp - 1
  36.         #print(y, suma_temp)
  37.     return abs(suma_temp)
  38. #Si
  39. def bfs_paths(graph, start, goal):
  40.     queue = [(start, [start])]
  41.     while queue:
  42.         (vertex, path) = queue.pop(0)
  43.         for next in set(graph[vertex]) - set(path):
  44.             if next == goal:
  45.                 yield path + [next]
  46.             else:
  47.                 queue.append((next, path + [next]))
  48.  
  49. def strangeness(i, listita, nuevalist):
  50.     h = cualhermano(listita, nuevalist)
  51.     if h == 0:
  52.         return 0
  53.     else:
  54.         while (h not in nuevalist):
  55.             nuevalist.append(h)
  56.             sumaMax = cuantostrange(c, nuevalist)  # extrañeza de 1-7
  57.  
  58.             h = cualhermano(listita, nuevalist)
  59.             if h == 0:
  60.                 return 0
  61.             nl2 = nuevalist
  62.             nl2.append(h)
  63.             return max(sumaMax, strangeness(h, lista[h - 1], nl2))
  64.  
  65. n = int(input().strip())
  66. c = list(map(int, input().strip().split(' ')))
  67. sumaTot = 0
  68.  
  69. lista = [[] for _ in range(n)]
  70. newlist = []
  71. caminoResultante = []
  72. diccionario = {}
  73. for a in range(n - 1):
  74.     x, y = input().strip().split(' ')
  75.     x, y = [int(x), int(y)]
  76.     lista[x - 1].append(y)
  77.     lista[y - 1].append(x)
  78.     diccionario.update({x:lista[x - 1]})
  79.     diccionario.update({y:lista[y - 1]})
  80.  
  81. mayorStr = 0
  82.  
  83. for i in range(n):
  84.     newlist.append(i + 1)
  85.     sumaMax = strangeness(i, lista[i], newlist)
  86.     if sumaMax > mayorStr:
  87.         mayorStr = sumaMax
  88. c1=0
  89. c2=1
  90. '''
  91. while c1 < n:
  92.    print(bfs_paths(diccionario, c1, ))
  93.    c1+=1
  94. '''
  95.  
  96. for k in diccionario.keys():
  97.     for j in range(1, n+1):
  98.         if k != j:
  99.             camino = (list(bfs_paths(diccionario, k, j)))
  100.             sum_temp = suma(camino)
  101.  
  102.  
  103.             if sumaTot < sum_temp:
  104.                 sumaTot = sum_temp
  105.                 caminoResultante = camino
  106.         #print (j)
  107.  
  108. print(sumaTot)
  109. print(len(caminoResultante[0]))
  110. print(*sorted(caminoResultante[0]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement