fork(1) download
  1. #Problem : Which Books to Read
  2. #Language : Python
  3. #Compiled Using : py_compile
  4. #Version : Python 2.7.1
  5. #Input for your program will be provided from STDIN
  6. #Print out all output from your program to STDOUT
  7.  
  8. import sys
  9.  
  10. name = raw_input()
  11. D = int(raw_input()) #degree of separation
  12. N = int(raw_input()) #number of links
  13. M = int(raw_input()) #book users
  14.  
  15. users = {}
  16. books = {}
  17.  
  18. def build_edges(user1, user2):
  19. if user1 not in users:
  20. users[user1] = set([user2, ])
  21. else:
  22. users[user1].add(user2)
  23.  
  24. for i in xrange(N):
  25. nw = raw_input()
  26. us = nw.split('|')
  27. build_edges(us[0], us[1])
  28. build_edges(us[1], us[0])
  29.  
  30. def build_booklist(user1, book):
  31. if user1 not in books:
  32. users[user1] = []
  33. else:
  34. users[user1].append(user2)
  35.  
  36. for i in xrange(M):
  37. bk = raw_input().split('|')
  38. books[bk[0]] = []
  39. for book in bk[1:]:
  40. books[bk[0]].append(book)
  41.  
  42. rec = []
  43. depth = [0,]
  44.  
  45. def bfs(graph, start):
  46. visited, queue = set(), [start]
  47. while queue:
  48. vertex = queue.pop(0)
  49. if vertex not in visited:
  50. visited.add(vertex)
  51. for book in books[vertex]:
  52. if book not in books[start]:
  53. rec.append(book)
  54. queue.extend(graph[vertex] - visited)
  55. depth[0] += 1
  56. if depth[0] > D:
  57. return
  58. return visited
  59.  
  60. bfs(users, name)
  61. print len(rec)
Success #stdin #stdout 0.01s 7696KB
stdin
Alice
2
3
4
Alice|Bob
Bob|Carol
Carol|Don
Alice|The Hobbit|Lord of the Flies
Bob|Life of Pi|A Tale of Two Cities|Lord of the Flies
Carol|Anna Karenina|Solaris|2001: A Space Odyssey
Don|Plato’s Republic|The Twelve Caesars
stdout
5