wery00

Untitled

Jul 16th, 2021
1,243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.45 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.*;
  3.  
  4. public class game_as {
  5.     int n1;
  6.     int n2;
  7.  
  8.     ArrayList<Integer>[] es;
  9.     boolean[] u;
  10.     int[] px;
  11.     int[] py;
  12.  
  13.     boolean[] killed1;
  14.     boolean[] killed2;
  15.  
  16.     boolean dfs(int i) {
  17.         u[i] = true;
  18.         for (int j : es[i]) {
  19.             if (!killed2[j] && (py[j] == -1 || (!u[py[j]] && !killed1[py[j]]))) {
  20.                 if (py[j] == -1 || dfs(py[j])) {
  21.                     px[i] = j;
  22.                     py[j] = i;
  23.                     return true;
  24.                 }
  25.             }
  26.         }
  27.         return false;
  28.     }
  29.  
  30.     public void run() throws IOException {
  31.         Scanner in = new Scanner(new File("game.in"));
  32.         PrintWriter out = new PrintWriter(new File("game.out"));
  33.  
  34.         n1 = in.nextInt();
  35.         n2 = in.nextInt();
  36.  
  37.         es = new ArrayList[n1];
  38.         for (int i = 0; i < n1; i++) {
  39.             es[i] = new ArrayList<Integer>();
  40.         }
  41.  
  42.         int m = in.nextInt();
  43.  
  44.         for (int i = 0; i < m; i++) {
  45.             int a = in.nextInt() - 1;
  46.             int b = in.nextInt() - 1;
  47.             es[a].add(b);
  48.         }
  49.  
  50.         u = new boolean[n1];
  51.         px = new int[n1];
  52.         Arrays.fill(px, -1);
  53.         py = new int[n2];
  54.         Arrays.fill(py, -1);
  55.         killed1 = new boolean[n1];
  56.         killed2 = new boolean[n2];
  57.  
  58.         for (int i = 0; i < n1; i++) {
  59.             Arrays.fill(u, false);
  60.             dfs(i);
  61.         }
  62.  
  63.         char[] w1 = new char[n1];
  64.         char[] w2 = new char[n2];
  65.         for (int i = 0; i < n1; i++) {
  66.             if (px[i] == -1) {
  67.                 w1[i] = 'P';
  68.             } else {
  69.                 py[px[i]] = -1;
  70.                 killed1[i] = true;
  71.                 Arrays.fill(u, false);
  72.                 boolean found = false;
  73.                 for (int j = 0; j < n1; j++) {
  74.                     if (j != i && px[j] == -1 && !u[j] && dfs(j)) {
  75.                         found = true;
  76.                         break;
  77.                     }
  78.                 }
  79.                 if (found) {
  80.                     w1[i] = 'P';
  81.                     px[i] = -1;
  82.                     killed1[i] = false;
  83.                 } else {
  84.                     w1[i] = 'N';
  85.                     py[px[i]] = i;
  86.                     killed1[i] = false;
  87.                 }
  88.             }
  89.         }
  90.         for (int i = 0; i < n2; i++) {
  91.             if (py[i] == -1) {
  92.                 w2[i] = 'P';
  93.             } else {
  94.                 px[py[i]] = -1;
  95.                 killed2[i] = true;
  96.                 Arrays.fill(u, false);
  97.                 boolean found = false;
  98.                 for (int j = 0; j < n1; j++) {
  99.                     if (px[j] == -1 && !u[j] && dfs(j)) {
  100.                         found = true;
  101.                         break;
  102.                     }
  103.                 }
  104.                 if (found) {
  105.                     w2[i] = 'P';
  106.                     py[i] = -1;
  107.                     killed2[i] = false;
  108.                 } else {
  109.                     w2[i] = 'N';
  110.                     px[py[i]] = i;
  111.                     killed2[i] = false;
  112.                 }
  113.             }
  114.         }
  115.  
  116.         for (char c : w1) {
  117.             out.print(c);
  118.         }
  119.         out.println();
  120.         for (char c : w2) {
  121.             out.print(c);
  122.         }
  123.         out.println();
  124.  
  125.         in.close();
  126.         out.close();
  127.     }
  128.  
  129.     public static void main(String[] arg) throws IOException {
  130.         new game_as().run();
  131.     }
  132. }
  133.  
Advertisement
Add Comment
Please, Sign In to add comment