qwerty787788

kotli

Dec 6th, 2013
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.49 KB | None | 0 0
  1. /**
  2.  * User: qwerty787788
  3.  * Date: 06.12.13
  4.  * Time: 20:56
  5.  */
  6.  
  7.  
  8.  
  9. import java.io.InputStreamReader
  10. import java.io.BufferedReader
  11. import java.util.StringTokenizer
  12. import java.util.ArrayList
  13.  
  14.  
  15. fun isPrime(x: Int): Boolean {
  16.     if (x == 1)
  17.         return false;
  18.     var j = 2
  19.     while (j * j <= x) {
  20.         if (x % j == 0)
  21.             return false;
  22.         j++;
  23.     }
  24.     return true;
  25. }
  26.  
  27. var br = BufferedReader(InputStreamReader(System.`in`))
  28. var st = StringTokenizer("") : StringTokenizer;
  29.  
  30. fun next() : String {
  31.     while (!st.hasMoreElements()) {
  32.         var s = br.readLine();
  33.         st = StringTokenizer(s);
  34.     }
  35.     return st.nextToken();
  36. }
  37.  
  38. fun nextInt(): Int {
  39.     return Integer.parseInt(next());
  40. }
  41.  
  42. fun sol() {
  43.     var max = nextInt()
  44.     var sum = 0;
  45.     for (i in 2..max)
  46.         if (isPrime(i))
  47.             sum += i;
  48.     println(sum);
  49.     if (isPrime(sum)) {
  50.         println("YES");
  51.     } else {
  52.         println("NO");
  53.     }
  54. }
  55.  
  56. fun solA() {
  57.     println(nextInt() + nextInt());
  58. }
  59.  
  60. fun solB() {
  61.     var s = next();
  62.     var sum1 = 0;
  63.     var sum2 = 0;
  64.     for (i in 0..2) {
  65.         sum1 += s.charAt(i)-'0';
  66.     }
  67.     for (i in 3..5) {
  68.         sum2 += s.charAt(i)-'0';
  69.     }
  70.     if (sum1 == sum2) {
  71.         println("Lucky ticket");
  72.     } else {
  73.         println("Unlucky ticket");
  74.     }
  75. }
  76.  
  77. fun solC() {
  78.     var t = nextInt();
  79.     var res = 0;
  80.     for (i in 2..t/2)
  81.         if (isPrime(i) && isPrime(t - i))
  82.             res++;
  83.     println(res);
  84. }
  85.  
  86. fun solD() {
  87.     var n = nextInt();
  88.     var m = nextInt();
  89.     var d =Array(n) {IntArray(n)};
  90.     for (i in 0..n-1)
  91.         for (j in 0..n-1)                   {
  92.             d[i][j] =  Integer.MAX_VALUE / 3;
  93.             if (i == j)
  94.                 d[i][j] = 0;
  95.         }
  96.     for (i in 1..m) {
  97.         var fr = nextInt() - 1;
  98.         var to = nextInt() - 1;
  99.         var cost = nextInt();
  100.         if (d[fr][to] > cost)
  101.             d[fr][to] = cost;
  102.     }
  103.     for (i in 0..n-1)
  104.         for (j in 0..n-1)
  105.             for (k in 0..n-1)
  106.                 if (d[j][i]+d[i][k] < d[j][k])
  107.                     d[j][k] = d[j][i] + d[i][k];
  108.     for (i in 0..n-1) {
  109.         for (j in 0..n - 1) {
  110.             print(d[i][j]);
  111.             print(" ");
  112.         }
  113.         println();
  114.     }
  115. }
  116.  
  117. fun solE() {
  118.     var n = nextInt();
  119.     var a = IntArray(n);
  120.     for (i in 0..n-1)
  121.         a[i] = nextInt();
  122.     var m = nextInt();
  123.     var b = IntArray(m);
  124.     for (i in 0..m- 1)
  125.         b[i] = nextInt();
  126.     var dp = Array(n+1) {IntArray(m+1)};
  127.     for (i in 0..n-1)
  128.         for (j in 0..m-1) {
  129.             if (a[i] == b[j]) {
  130.                 dp[i+1][j+1] = 1 + dp[i][j];
  131.             }
  132.             if (dp[i][j+1] > dp[i + 1][j + 1])
  133.                 dp[i+1][j+1]=dp[i][j+1];
  134.             if (dp[i+1][j] > dp[i + 1][j + 1])
  135.                 dp[i+1][j+1] = dp[i + 1][j];
  136.         }
  137.     var ans = arrayListOf<Int>();
  138.     var i = n;
  139.     var j = m;
  140.     while (i != 0 && j != 0) {
  141.         if (a[i - 1] == b[j - 1]) {
  142.             ans.add(a[i - 1]);
  143.             i--; j--;
  144.         } else {
  145.             if (dp[i-1][j] == dp[i][j]) {
  146.                 i--;
  147.             } else {
  148.                 j--;
  149.             }
  150.         }
  151.     }
  152.     println(ans.size());
  153.     for (i in 0..ans.size()-1) {
  154.         print(ans.get(ans.size() - 1 - i));
  155.         print(" ");
  156.     }
  157. }
  158.  
  159.  
  160. private class Road(fr1 : Int, to1 : Int, cap1 : Long) {
  161.     var fr = fr1;
  162.     var to = to1;
  163.     var cap = cap1;
  164.     var used = 0 : Long;
  165.     var rev = this : Road;
  166. }
  167.  
  168. fun bfs(g : Array<ArrayList<Road>>, h : Array<Int>) : Boolean {
  169.     var n = g.size;
  170.     var was = arrayListOf<Int>();
  171.     var wasArray = BooleanArray(n);
  172.     was.add(0);
  173.     h[0] = 0;
  174.     wasArray[0] = true;
  175.     var it = 0;
  176.     while (it < was.size) {
  177.         var v = was.get(it);
  178.         it++;
  179.         for (r in g[v]) {
  180.             if (r.used < r.cap && !wasArray[r.to]) {
  181.                 wasArray[r.to] = true;
  182.                 was.add(r.to);
  183.                 h[r.to] = h[r.fr] + 1;
  184.             }
  185.         }
  186.     }
  187.     return wasArray[n-1];
  188. }
  189.  
  190. fun dfs(v : Int, flow : Long, h : Array<Int>, g : Array<ArrayList<Road>>, start : Array<Int>) : Long {
  191.     var n = g.size;
  192.     if (v == n - 1 || flow == 0.toLong())
  193.         return flow;
  194.     while (start[v] < g[v].size()) {
  195.         var r = g[v][start[v]];
  196.         start[v]++;
  197.         if (r.used < r.cap && h[r.to] == h[r.fr] + 1) {
  198.             var more = dfs(r.to, Math.min(flow, r.cap - r.used), h, g, start);
  199.             if (more != 0.toLong()) {
  200.                 r.used += more;
  201.                 r.rev.used -= more;
  202.                 return more;
  203.             }
  204.         }
  205.     }
  206.     return 0.toLong();
  207. }
  208.  
  209. fun solF() {
  210.     var n = nextInt();
  211.     var m = nextInt();
  212.  
  213.    var g = Array(n){arrayListOf<Road>()}
  214.     for (i in 0..m - 1) {
  215.         var fr = nextInt() - 1;
  216.         var to = nextInt() - 1;
  217.         var cap = nextInt().toLong();
  218.        var r = Road(fr, to, cap);
  219.         var r2 = Road(to, fr, 0.toLong());
  220.         r.rev = r2;
  221.         r2.rev = r;
  222.         g[fr].add(r);
  223.         g[to].add(r2);
  224.     }
  225.     var res = 0.toLong();
  226.     var h = Array(n){-1};
  227.     var inf = (1e18).toLong();
  228.     while (bfs(g, h)) {
  229.         var startFrom = Array(n){0};
  230.         while (true) {
  231.             var more = dfs(0, inf, h, g, startFrom);
  232.             if (more == 0.toLong())
  233.                 break;
  234.             res += more;
  235.         }
  236.     }
  237.     println(res);
  238. }
  239.  
  240. fun main(args: Array<String>): Unit {
  241.     solF();
  242. }
Advertisement
Add Comment
Please, Sign In to add comment