Submission #1554294


Source Code Expand

import java.util.*;

public class Main {

  public static void main(String[] args) {
   
      Scanner sc = new Scanner(System.in);

      int N = sc.nextInt();
      int M = sc.nextInt();
      
      long r = sc.nextInt();
      long t = sc.nextInt();
      
      List<Edge>[] node = new List[N];
      
      for(int i = 0;i < N;i++)
          node[i] = new ArrayList<>();
      
      for(int i = 0;i < M;i++){
          int a = sc.nextInt() - 1;
          int b = sc.nextInt() - 1;
          int c = sc.nextInt();
          node[a].add(new Edge(b,c));
          node[b].add(new Edge(a,c));          
      }
      
      long sum = 0;
      
      for(int i = 0;i < N;i++){
          int dist[] = dijkstra(node,i);
          for(int j = 1 ;j < N;j++){
              final int d = (int) ((dist[j]*r + t)/t);
              final int idx = binarySearch(dist,d);
              if(idx < 0) break;
              sum += N - idx - (r < t?1:0);
          }
      }      
    
      System.out.println(sum);
      
  }
  
  static int binarySearch(int []a,int v){
      int l = 0, r = a.length - 1, s = -1;      
      
      while(l <= r){
          
          int m = (l + r)/2;  
          
          if(a[m] >= v){
              s = m;              
              r = m - 1;
          }else{
              l = m + 1;
          }                    
          
      }      
      
      return s;      
  }  
  
  static int [] dijkstra(List<Edge>[] node,int s){
      Queue<Pos> qu = new PriorityQueue<>();
      qu.add(new Pos(s,0));
      int[] dist = new int[node.length];
      Arrays.fill(dist,Integer.MAX_VALUE);
      while(!qu.isEmpty()){
          Pos p = qu.poll();
          if(dist[p.id] < Integer.MAX_VALUE) 
              continue;
          dist[p.id] = p.dist;
          for(Edge e: node[p.id]){
              qu.add(new Pos(e.to,e.dist + p.dist));
          }
      }
      Arrays.sort(dist);
      return dist;
  }
  
  static class Pos implements Comparable<Pos>{
      int id,dist;
      
      Pos(int id,int d){
          this.id = id;
          dist    = d;
      }
      
      public int compareTo(Pos o){
          return dist - o.dist;
      }      
  }
  
  static class Edge{
      int to,dist;
      Edge(int to,int d){
          this.to = to;
          dist    = d;
      }
  }
  
}

Submission Info

Submission Time
Task C - ウサギとカメ
User suesue
Language Java8 (OpenJDK 1.8.0)
Score 100
Code Size 2415 Byte
Status AC
Exec Time 2687 ms
Memory 150528 KB

Compile Error

Note: ./Main.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

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 113 ms 19540 KB
subtask0_sample-02.txt AC 93 ms 18772 KB
subtask1_01.txt AC 109 ms 21844 KB
subtask1_02.txt AC 105 ms 18768 KB
subtask1_03.txt AC 102 ms 21972 KB
subtask1_04.txt AC 93 ms 20692 KB
subtask1_05.txt AC 160 ms 24660 KB
subtask1_06.txt AC 223 ms 29916 KB
subtask1_07.txt AC 558 ms 46260 KB
subtask1_08.txt AC 482 ms 46284 KB
subtask1_09.txt AC 1132 ms 88684 KB
subtask1_10.txt AC 894 ms 86948 KB
subtask1_11.txt AC 746 ms 61900 KB
subtask1_12.txt AC 2268 ms 147768 KB
subtask1_13.txt AC 2162 ms 85184 KB
subtask1_14.txt AC 2620 ms 147808 KB
subtask1_15.txt AC 1992 ms 149752 KB
subtask1_16.txt AC 2687 ms 150528 KB