Guest User

Untitled

a guest
Jul 19th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.67 KB | None | 0 0
  1. import static java.lang.Math.min;
  2.  
  3. import java.util.*;
  4. import java.io.*;
  5.  
  6. public class C implements Runnable {
  7.  
  8. public static void main(String args[]) {
  9. new Thread(new C()).start();
  10. }
  11.  
  12. BufferedReader br;
  13. StringTokenizer st;
  14. PrintWriter out;
  15. private String FNAME = "cut";
  16. boolean eof = false;
  17.  
  18. @Override
  19. public void run() {
  20. try {
  21. Locale.setDefault(Locale.US);
  22. br = new BufferedReader(new FileReader(FNAME + ".in"));
  23. out = new PrintWriter(FNAME + ".out");
  24. solve();
  25. br.close();
  26. out.close();
  27.  
  28. } catch (Exception e) {
  29. e.printStackTrace();
  30. System.exit(566);
  31. }
  32. }
  33.  
  34. String nextToken() {
  35. while (st == null || !st.hasMoreTokens()) {
  36. try {
  37. st = new StringTokenizer(br.readLine());
  38. } catch (IOException e) {
  39. eof = true;
  40. return "0";
  41. }
  42. }
  43. return st.nextToken();
  44. }
  45.  
  46. int nextInt() {
  47. return Integer.parseInt(nextToken());
  48. }
  49.  
  50. long nextLong() {
  51. return Long.parseLong(nextToken());
  52. }
  53.  
  54. double nextDouble() {
  55. return Double.parseDouble(nextToken());
  56. }
  57.  
  58. void My_Assert(boolean b, String s) {
  59. if (!b)
  60. throw new Error("Assertion " + s);
  61. }
  62.  
  63. long[][] f, c;
  64. boolean[] was;
  65. int n;
  66.  
  67.  
  68. final long INF = (long) 1e12;
  69.  
  70. private void solve() {
  71. n = nextInt();
  72. int m = nextInt();
  73. f = new long[n][n];
  74. c = new long[n][n];
  75.  
  76. for (int i = 0; i < m; i++) {
  77. int a = nextInt();
  78. int b = nextInt();
  79. c[a - 1][b - 1] += nextLong();
  80. }
  81.  
  82. was = new boolean[n];
  83.  
  84. Queue<Integer> q;
  85. int[] p;
  86. // for (int it = 0; it < 2; it++) {
  87. while (true) {
  88. Arrays.fill(was, false);
  89. q = new LinkedList<Integer>();
  90. p = new int[n];
  91. q.add(0);
  92. was[0] = true;
  93.  
  94. while (!q.isEmpty()) {
  95. int u = q.poll();
  96.  
  97. for (int i = 0; i < n; i++)
  98. if (!was[i] && c[u][i] > f[u][i]) {
  99. was[i] = true;
  100. p[i] = u;
  101. q.add(i);
  102. }
  103. }
  104. if (!was[n - 1])
  105. break;
  106.  
  107.  
  108.  
  109. long minc = INF;
  110. int t = n - 1;
  111. int u;
  112. while (t != 0) {
  113. u = p[t];
  114. minc = min(minc, c[u][t] - f[u][t]);
  115. t = u;
  116. }
  117.  
  118. // System.err.println(minc);
  119.  
  120. t = n - 1;
  121. while (t != 0) {
  122. f[p[t]][t] += minc;
  123. f[t][p[t]] -= minc;
  124. t = p[t];
  125. }
  126. }
  127.  
  128. Arrays.fill(was, false);
  129. q = new LinkedList<Integer>();
  130. q.add(0);
  131. was[0] = true;
  132.  
  133. while (!q.isEmpty()) {
  134. int u = q.poll();
  135.  
  136. for (int i = 0; i < n; i++)
  137. if (!was[i] && c[u][i] > f[u][i]) {
  138. was[i] = true;
  139. q.add(i);
  140. }
  141. }
  142.  
  143. int ans = 0;
  144. for (int i = 0; i < n; i++)
  145. if (was[i])
  146. ans++;
  147.  
  148. out.println(ans);
  149. for (int i = 0; i < n; i++)
  150. if (was[i])
  151. out.print(i + 1 + " ");
  152.  
  153. }
  154.  
  155. }
Add Comment
Please, Sign In to add comment