Advertisement
vov44k

t180

Mar 9th, 2023
442
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.00 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.*;
  3.  
  4. public class t180 {
  5.     static final int INF = Integer.MAX_VALUE / 2;
  6.     static int[][] arr;
  7.  
  8.     public static void main(String[] args) throws IOException {
  9.         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
  10.         StringTokenizer st = new StringTokenizer(in.readLine());
  11.         int n = Integer.parseInt(st.nextToken());
  12.         int edges = 0;
  13.         arr = new int[n][n];
  14.         for (int i = 0; i < n; i++) {
  15.             st = new StringTokenizer(in.readLine());
  16.             for (int j = 0; j < n; j++) {
  17.                 arr[i][j] = Integer.parseInt(st.nextToken());
  18.                 if (arr[i][j] != 100000) {
  19.                     edges++;
  20.                 }
  21.             }
  22.         }
  23.         Edge[] ed = new Edge[edges];
  24.         int[] distance = new int[n];
  25.         Arrays.fill(distance, INF);
  26.         int[] prev = new int[n];
  27.         Arrays.fill(prev, -1);
  28.         int index = 0;
  29.         for (int i = 0; i < n; i++) {
  30.             for (int j = 0; j < n; j++) {
  31.                 if (arr[i][j] != 100000) {
  32.                     ed[index] = new Edge(i, j, arr[i][j]);
  33.                     index++;
  34.                 }
  35.             }
  36.         }
  37.         distance[0] = 0;
  38.         int t = 0;
  39.         for (int i = 0; i < n; i++) {
  40.             t = -1;
  41.             for (int j = 0; j < edges; j++) {
  42.                 if (distance[ed[j].to] > distance[ed[j].from] + ed[j].weight) {
  43.                     distance[ed[j].to] = Math.max(-INF, distance[ed[j].from] + ed[j].weight);
  44.                     prev[ed[j].to] = ed[j].from;
  45.                     t = ed[j].to;
  46.                 }
  47.  
  48.             }
  49.         }
  50.         int[] answer = new int[n + 1];
  51.         index = 0;
  52.         ArrayList<Integer> ans = new ArrayList<Integer>();
  53.         if (t != -1) {
  54.             for (int i = 0; i < n; i++) {
  55.                 t = prev[t];
  56.             }
  57.             for (int i = t; 1 < 2; i = prev[i]) {
  58.                 answer[index] = i;
  59.                 index++;
  60.                 ans.add(i);
  61.                 if (i == t && index > 1) {
  62.                     break;
  63.                 }
  64.             }
  65.             System.out.println("YES");
  66.             System.out.println(index);
  67.             for (int i = 0; i < index; i++)
  68.                 System.out.print((answer[index-1-i]+1) + " ");
  69.         } else
  70.             System.out.println("NO");
  71.         in.close();
  72.     }
  73.     static class Edge {
  74.         int from;
  75.         int to;
  76.         int weight;
  77.  
  78.         public Edge(int u, int v, int w) {
  79.             this.from = u;
  80.             this.to = v;
  81.             this.weight = w;
  82.         }
  83.     }
  84. }
  85.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement