Submission #3228121


Source Code Expand

module IntMap = Map.Make (struct
  type t = int
  let compare = compare
end)

let rec lower_bound l r p =
  if r <= 1 + l
  then r
  else let m = (l + r) / 2 in
       if p m
       then lower_bound l m p
       else lower_bound m r p

let () = Scanf.scanf "%d %d %d %d\n" @@ fun n m r t ->
  let es = Array.make n [] in
  for i = 0 to m - 1 do
    Scanf.scanf "%d %d %d\n" @@ fun a b c ->
      es.(a - 1) <- (b - 1, c) :: es.(a - 1);
      es.(b - 1) <- (a - 1, c) :: es.(b - 1)
  done;
  let d = Array.make_matrix n n max_int in
  for s = 0 to n - 1 do
    d.(s).(s) <- 0;
    let rec dijkstra q =
      match IntMap.min_binding q with
      | exception Not_found -> ()
      | (w, us) -> dijkstra @@ List.fold_left (fun q u ->
          if d.(s).(u) < w then q
          else List.fold_left (fun q (v, c) ->
            if d.(s).(v) <= w + c then q
            else begin
              d.(s).(v) <- w + c;
              IntMap.add (w + c)
                (v ::
                  try IntMap.find (w + c) q
                  with Not_found -> []) q
            end) q es.(u)) (IntMap.remove w q) us in
    dijkstra (IntMap.singleton 0 [s])
  done;
  Printf.printf "%d\n" @@
  Array.fold_left ( + ) 0 @@
  Array.init n @@ fun g ->
    d.(g).(g) <- 1000000000000000;
    Array.sort compare d.(g);
    Array.fold_left ( + ) 0 @@
    Array.init (n - 1) @@ fun i ->
      ( - ) (n - 1 - if r < t then 1 else 0) @@
      lower_bound (-1) (n - 1) @@ fun j -> d.(g).(i) * r < d.(g).(j) * t

Submission Info

Submission Time
Task C - ウサギとカメ
User fetburner
Language OCaml (4.02.3)
Score 100
Code Size 1532 Byte
Status AC
Exec Time 4012 ms
Memory 91712 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status
AC × 2
AC × 18
Set Name Test Cases
Sample subtask0_sample-01.txt, subtask0_sample-02.txt
All subtask0_sample-01.txt, subtask0_sample-02.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt
Case Name Status Exec Time Memory
subtask0_sample-01.txt AC 1 ms 384 KB
subtask0_sample-02.txt AC 1 ms 384 KB
subtask1_01.txt AC 1 ms 512 KB
subtask1_02.txt AC 2 ms 768 KB
subtask1_03.txt AC 2 ms 768 KB
subtask1_04.txt AC 1 ms 384 KB
subtask1_05.txt AC 22 ms 2944 KB
subtask1_06.txt AC 24 ms 3072 KB
subtask1_07.txt AC 70 ms 4736 KB
subtask1_08.txt AC 109 ms 5376 KB
subtask1_09.txt AC 1068 ms 26496 KB
subtask1_10.txt AC 1164 ms 30080 KB
subtask1_11.txt AC 405 ms 12160 KB
subtask1_12.txt AC 3906 ms 86588 KB
subtask1_13.txt AC 3899 ms 86588 KB
subtask1_14.txt AC 4012 ms 91452 KB
subtask1_15.txt AC 2560 ms 57920 KB
subtask1_16.txt AC 3997 ms 91712 KB