Advertisement
Guest User

Untitled

a guest
May 23rd, 2019
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.55 KB | None | 0 0
  1. MOD=10**9+7
  2. for case in xrange(int(raw_input())):
  3. M=int(raw_input())
  4. rea=[set([]) for _ in xrange(M)]
  5. arr=[None]*M
  6. for i in xrange(M):
  7. a,b=map(int,raw_input().split())
  8. rea[a-1].add(i)
  9. rea[b-1].add(i)
  10. arr[i]=[a-1,b-1]
  11. g=map(int,raw_input().split())
  12. rea0=set([])
  13. lev=[-1]*M
  14. lev[0]=0
  15. todo=set(rea[0])
  16. cyc=set([]) if 0 not in rea[0] else set([0])
  17. while todo:
  18. x=todo.pop()
  19. if x not in rea0:
  20. for y in rea[x]:
  21. if y not in rea0:
  22. rea0.add(y)
  23. todo.add(y)
  24. lev[y]=lev[x]+1
  25. else:
  26. cyc.add(y)
  27. alls=sum(g[i] for i in rea0)
  28. if alls==0:
  29. print "Case #"+str(case+1)+": "+str(g[0])
  30. else:
  31. for i in xrange(M):
  32. if i in rea0:
  33. a,b=arr[i]
  34. if a not in rea0:
  35. if b not in rea0:
  36. arr[i]=[]
  37. g[i]=0
  38. else:
  39. arr[i]=b
  40. elif b not in rea0:
  41. arr[i]=[a]
  42. isunb=False
  43. for x in cyc:
  44. act=x
  45. for i in xrange(lev[x]):
  46. if len(arr[act])>1:
  47. isunb=True
  48. break
  49. else:
  50. act=arr[act][0] # should always give one
  51. if isunb:
  52. print "Case #"+str(case+1)+": UNBOUNDED"
  53. else:
  54. levs={i: set([]) for i in xrange(M+1)}
  55. for i in xrange(M):
  56. if lev[i]!=-1:
  57. levs[lev[i]].add(i)
  58. for i in reversed(xrange(M)):
  59. for x in levs[i]:
  60. act=g[x]
  61. for a in arr[x]:
  62. g[a]=(g[a]+act)%MOD
  63. print "Case #"+str(case+1)+": "+str(g[0])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement