Advertisement
moisey312

Untitled

May 13th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.95 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.ArrayList;
  3. import java.util.Scanner;
  4. import java.util.Stack;
  5. import java.util.StringTokenizer;
  6.  
  7. class FastScanner {
  8.     private BufferedReader br;
  9.     private StringTokenizer st;
  10.  
  11.     public FastScanner(InputStreamReader reader) {
  12.         br = new BufferedReader(reader);
  13.     }
  14.  
  15.     public String next() {
  16.         while (st == null || !st.hasMoreTokens()) {
  17.             try {
  18.                 st = new StringTokenizer(br.readLine());
  19.             } catch (Exception e) {
  20.                 e.printStackTrace();
  21.             }
  22.         }
  23.         return st.nextToken();
  24.     }
  25.  
  26.     public int nextInt() {
  27.         return Integer.parseInt(next());
  28.     }
  29.  
  30.     public double nextDouble() {
  31.         return Double.parseDouble(next());
  32.     }
  33.  
  34.     public void close() throws Exception {
  35.         br.close();
  36.     }
  37. }
  38.  
  39.  
  40. public class A {
  41.     public static void main(String[] args) {
  42.         FastScanner s = new FastScanner(new InputStreamReader(System.in));
  43.         PrintWriter pw = new PrintWriter(new BufferedOutputStream(System.out));
  44.         ArrayList<ArrayList<Integer>> sosedi = new ArrayList<>();
  45.         int n = s.nextInt();
  46.         int m = s.nextInt();
  47.         for (int i = 0; i < n; i++) {
  48.             sosedi.add(new ArrayList<>());
  49.         }
  50.         int k1, k2;
  51.         for (int i = 0; i < m; i++) {
  52.             k1 = s.nextInt();
  53.             k2 = s.nextInt();
  54.             sosedi.get(k1 - 1).add(k2 - 1);
  55.         }
  56.         int was[] = new int[n];
  57.         Stack<Integer> road = new Stack<>();
  58.  
  59.         for (int j = 0; j < n; j++) {
  60.             if (was[j] == 0) {
  61.                 road.push(j);
  62.                 was[j] = 1;
  63.                 while (!road.empty()) {
  64.                     boolean prov = true;
  65.                     for (int i = 0; i < sosedi.get(road.peek()).size(); i++) {
  66.                         if (was[sosedi.get(road.peek()).get(i)] == 0) {
  67.                             road.push(sosedi.get(road.peek()).get(i));
  68.                             was[road.peek()] = 1;
  69.                             prov = false;
  70.                             break;
  71.                         }
  72.                         if (was[sosedi.get(road.peek()).get(i)] == 1) {
  73.                             pw.println("YES");
  74.                             int t = sosedi.get(road.peek()).get(i);
  75.                             String answer = String.valueOf(sosedi.get(road.peek()).get(i) + 1);
  76.                             while (road.peek() != t) {
  77.                                 answer = String.valueOf(road.pop() + 1) + " " + answer;
  78.                             }
  79.                             pw.print(answer);
  80.                             pw.close();
  81.                             System.exit(0);
  82.                         }
  83.                     }
  84.                     if (prov) {
  85.                         was[road.pop()] = 2;
  86.                     }
  87.                 }
  88.             }
  89.  
  90.         }
  91.  
  92.         pw.print("NO");
  93.         pw.close();
  94.     }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement