Advertisement
Guest User

Untitled

a guest
Feb 16th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.88 KB | None | 0 0
  1. import java.util.Scanner;
  2.  
  3. public class ShopAndShip {
  4.     public static int minIndex(int[] d, byte[] c) {
  5.         int min = 100000;
  6.         int index = 0;
  7.         for (int i = 0; i < d.length; i++) {
  8.             if (c[i] == 0 && d[i] < min) {
  9.                 min = d[i];
  10.                 index = i;
  11.             }
  12.         }
  13.         return index;
  14.     }
  15.  
  16.     public static void main (String[] args) {
  17.         Scanner s = new Scanner(System.in);
  18.         int n = s.nextInt();
  19.         int[][] graph = new int[n][n];
  20.         int[] dist = new int[n];
  21.         int[] cost = new int[n];
  22.         byte[] checked = new byte[n];
  23.         int t = s.nextInt();
  24.         for (int i = 0; i < n; i++) {
  25.             cost[i] = -1;
  26.         }
  27.         for (int i = 0; i < t; i++) {
  28.             int x = s.nextInt() - 1;
  29.             int y = s.nextInt() - 1;
  30.             int c = s.nextInt();
  31.             graph[x][y] = c;
  32.             graph[y][x] = c;
  33.         }
  34.         int k = s.nextInt();
  35.         for (int i = 0; i < k; i++) {
  36.             int z = s.nextInt() - 1;
  37.             int p = s.nextInt();
  38.             cost[z] = p;
  39.         }
  40.         int d = s.nextInt() - 1;
  41.         for (int i = 0; i < n; i++) {
  42.             if (i != d)
  43.                 dist[i] = 100000;
  44.             else
  45.                 dist[i] = 0;
  46.         }
  47.         for (int i = 0; i < n; i++) {
  48.             int v = minIndex(dist, checked);
  49.             for (int u = 0; u < n; u++) {
  50.                 if (graph[u][v] != 0 && dist[v] + graph[u][v] < dist[u])
  51.                     dist[u] = dist[v] + graph[u][v];
  52.             }
  53.             checked[v] = 1;
  54.         }
  55.         int min = 100000;
  56.         for (int i = 0; i < n; i++) {
  57.             if (cost[i] != -1) {
  58.                 cost[i] += dist[i];
  59.                 if (cost[i] < min)
  60.                     min = cost[i];
  61.             }
  62.         }
  63.         System.out.println(min);
  64.     }
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement