Submission #42277952


Source Code Expand

END { load __FILE__ unless $stdin.eof? }

class PairingHeap
  class Node
    attr_reader :key, :children

    def initialize(key)
      @key = key
      @children = []
    end
  end

  def initialize(pushes = [])
    @heaps = pushes.map { |key| Node.new(key) }
  end

  def push(key)
    @heaps << Node.new(key)
    return self
  end

  def shift
    return nil if @heaps.empty?

    reshape
    key, @heaps = @heaps[0].key, @heaps[0].children
    return key
  end

  def first
    return nil if @heaps.empty?

    reshape
    return @heaps[0].key
  end

  private

  def reshape
    @heaps.sort_by!(&:key)
    @heaps.size.pred.times do
      h = @heaps.pop
      @heaps[-1].children << h
    end
  end
end

module HeapWithObject
  def initialize(pushes = [])
    @objs = pushes.group_by(&:first)
        .transform_values! { |q| q.map!(&:last) }
    super(@objs.keys)
  end

  def push(key, obj)
    if (q = @objs[key])
      q << obj
      return self
    end

    @objs[key] = [obj]
    return super(key)
  end

  def shift
    key = first
    return unless key

    q = @objs[key]
    obj = q.shift

    if q.empty?
      @objs.delete(key)
      super  # == key
    end

    return key, obj
  end

  def first_pair
    key = first
    return unless key
    return key, @objs[key][0]
  end
end

class PriorityQueue < PairingHeap
  prepend HeapWithObject
end

n, m, k = gets.split.map!(&:to_i)

@nbrs = Array.new(n + 1) { [] }
m.times do
  a, b = gets.split.map!(&:to_i)
  @nbrs[a] << b
  @nbrs[b] << a
end

@guards = Array.new(n + 1, -1)
pushes = k.times.map do
  g, h = gets.split.map!(&:to_i)
  @guards[g] = h
  [-h, g]
end
pq = PriorityQueue.new(pushes)

while (h, v = pq.shift)
  h = -h
  next if h < @guards[v]

  h -= 1
  @nbrs[v].each do |u|
    next if @guards[u] >= h
    @guards[u] = h
    pq.push(-h, u)
  end
end

idx = (1..n).select { |v| @guards[v] >= 0 }
puts idx.size
puts idx * ' '

__END__

Submission Info

Submission Time
Task E - Art Gallery on Graph
User hmmnrst
Language Ruby (2.7.1)
Score 475
Code Size 2035 Byte
Status AC
Exec Time 1260 ms
Memory 94940 KiB

Judge Result

Set Name Sample All after_contest
Score / Max Score 0 / 0 475 / 475 0 / 0
Status
AC × 3
AC × 33
AC × 1
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 02_tree_00.txt, 02_tree_01.txt, 03_path_00.txt, 03_path_01.txt, 04_perfect_00.txt, 05_corner_1_00.txt, 05_corner_1_01.txt, 05_corner_1_02.txt, 05_corner_1_03.txt, 05_corner_1_04.txt, 05_corner_1_05.txt, 06_star_00.txt, 06_star_01.txt, 07_n_m_k_max_00.txt, 07_n_m_k_max_01.txt, 07_n_m_k_max_02.txt, 07_n_m_k_max_03.txt, 07_n_m_k_max_04.txt
after_contest 99_after_contest_00.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 59 ms 14108 KiB
00_sample_01.txt AC 53 ms 14272 KiB
00_sample_02.txt AC 56 ms 14320 KiB
01_random_00.txt AC 121 ms 25452 KiB
01_random_01.txt AC 97 ms 25876 KiB
01_random_02.txt AC 475 ms 37588 KiB
01_random_03.txt AC 512 ms 45372 KiB
01_random_04.txt AC 111 ms 23716 KiB
01_random_05.txt AC 564 ms 48640 KiB
01_random_06.txt AC 250 ms 34116 KiB
01_random_07.txt AC 255 ms 36332 KiB
01_random_08.txt AC 95 ms 25100 KiB
01_random_09.txt AC 95 ms 25968 KiB
01_random_10.txt AC 483 ms 43752 KiB
01_random_11.txt AC 534 ms 45700 KiB
02_tree_00.txt AC 550 ms 44292 KiB
02_tree_01.txt AC 255 ms 34420 KiB
03_path_00.txt AC 255 ms 31812 KiB
03_path_01.txt AC 244 ms 32556 KiB
04_perfect_00.txt AC 223 ms 17520 KiB
05_corner_1_00.txt AC 1165 ms 94772 KiB
05_corner_1_01.txt AC 1169 ms 94884 KiB
05_corner_1_02.txt AC 1260 ms 94752 KiB
05_corner_1_03.txt AC 1243 ms 94940 KiB
05_corner_1_04.txt AC 1161 ms 71372 KiB
05_corner_1_05.txt AC 1189 ms 71028 KiB
06_star_00.txt AC 711 ms 66452 KiB
06_star_01.txt AC 719 ms 66528 KiB
07_n_m_k_max_00.txt AC 960 ms 71572 KiB
07_n_m_k_max_01.txt AC 953 ms 57124 KiB
07_n_m_k_max_02.txt AC 955 ms 70556 KiB
07_n_m_k_max_03.txt AC 972 ms 70696 KiB
07_n_m_k_max_04.txt AC 984 ms 72804 KiB
99_after_contest_00.txt AC 888 ms 83640 KiB