Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/ruby
- require 'json'
- require 'stringio'
- #
- # Complete the 'cutTheTree' function below.
- #
- # The function is expected to return an INTEGER.
- # The function accepts following parameters:
- # 1. INTEGER_ARRAY data
- # 2. 2D_INTEGER_ARRAY edges
- #
- def cutTheTree(data, edges)
- nnext = Array.new(data.length+1, [])
- edges.each do |ed|
- a = ed[0]
- b = ed[1]
- #puts "#{a},#{b}"
- nnext[a] |= [b]
- nnext[b] |= [a]
- #puts "#{nnext}"
- end
- #puts "#{nnext}"
- nval = []
- vted = []
- define_method(:countnval) do |nod|
- vted[nod] = true
- count = data[nod-1]
- nnext[nod].each do |nx|
- next if vted[nx]
- count += countnval(nx)
- end
- nval[nod] = count
- return count
- end
- countnval 1
- nval.shift
- mid = nval[0]/2
- puts "#{mid}"
- if nval[0] % 2 == 0 then
- nval.map! do |val|
- 2*(val-mid).abs
- end
- else
- nval.map! do |val|
- val - mid > 0 ? 2*(val-mid).abs - 1 : 2*(val-mid).abs + 1
- end
- end
- return nval.min
- #puts "#{nval}"
- end
- fptr = File.open(ENV['OUTPUT_PATH'], 'w')
- n = gets.strip.to_i
- data = gets.rstrip.split.map(&:to_i)
- edges = Array.new(n - 1)
- (n - 1).times do |i|
- edges[i] = gets.rstrip.split.map(&:to_i)
- end
- result = cutTheTree data, edges
- fptr.write result
- fptr.write "\n"
- fptr.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement