Submission details
Task:Internet connection
Sender:david.meichel
Submission time:2018-09-17 13:44:29 +0300
Language:Java
Status:READY
Result:
Test results
testverdicttime
#10.27 sdetails
#20.28 sdetails
#30.29 sdetails
#40.28 sdetails
#50.28 sdetails
#6--details
#7--details
#8--details
#9--details
#10--details

Code

import java.util.*;
public class Task2
{
  public static void main(String[] args)
  {   
    long startTime = System.nanoTime();
    Scanner s = new Scanner(System.in);
    int n = s.nextInt();
    int m = s.nextInt();
    long tmp_flow;
    long[][] am = new long [n+1][n+1];
    long flow = 0;
    int x;
    int y;
    for(int i = 0; i < m; i++)
    {
      x = s.nextInt();
      y = s.nextInt();
      am[x][y] = s.nextInt();
    } 
    List<Integer> visited = new ArrayList<Integer>();
    List<Integer> track = new ArrayList<Integer>();
    List<Integer> path = find_path(am, 1, n, visited, track);
    visited = new ArrayList<Integer>();
    track = new ArrayList<Integer>();
    while(path.size() != 0)
    {
      tmp_flow = flow_of_path(am, path);
      flow += tmp_flow;
      am = switch_edges(am,path, tmp_flow);     
      path = find_path(am, 1, n, visited, track);
      visited = new ArrayList<Integer>();
      track = new ArrayList<Integer>();
    }
    System.out.println(flow); 
    long endTime   = System.nanoTime();
    long totalTime = endTime - startTime;
    double seconds = (double)totalTime / 1000000000.0;
    System.out.println("time: " + seconds);
  }

  public static long[][] switch_edges(long [][] am, List<Integer> path, long flow)
  {
    for (int i = 0; i < path.size()-1; i++)
    {
      int x = path.get(i);
      int y = path.get(i+1);
      am[x][y] = am[x][y] - flow;
      am[y][x] += flow;
    }
    return am;
  }

  public static long flow_of_path(long[][] am, List<Integer> path)
  {
    long flow = Long.MAX_VALUE;
    for (int i = 0; i < path.size()-1; i++)
    {
      int x = path.get(i);
      int y = path.get(i+1);    
      if(am[x][y] < flow)
        flow = am[x][y];
    }
    return flow;
  }
  public static List<Integer> find_path(long[][] am, int source, int target, List<Integer> visited, List<Integer> track)
  {
    visited.add(source);
    for(int i = 1; i < am[source].length; i++)
    { 
      if(am[source][i] != 0 && !visited.contains(i))
      {
        if(i == target)
        {
          track.add(0, target);
          track.add(0, source);
          return track;
        }
        else
        {
          List<Integer> track_from_i = find_path(am, i, target, visited, track);
          if(track_from_i.contains(target))
          {
            track.add(0, source);
            return track;
          }
          
        } 
      } 
    }
    return (new ArrayList<Integer>());  
    
  }

  public static void printam(int[][] am)
  {
    for(int i = 0; i < am.length; i++)
    {
      for(int j = 0; j < am[i].length; j++)
        System.out.print(am[i][j]);
      System.out.println("");
    }
  }
}

Test details

Test 1

Verdict:

input
10 20
5 6 19
4 5 47
3 5 7
4 9 62
...

correct output
73

user output
73
time: 0.084209489

Test 2

Verdict:

input
10 20
2 4 63
7 9 54
6 7 16
2 3 9
...

correct output
110

user output
110
time: 0.084665264

Test 3

Verdict:

input
10 20
5 6 90
2 3 46
7 8 80
6 7 60
...

correct output
29

user output
29
time: 0.083194983

Test 4

Verdict:

input
10 20
3 4 76
5 7 8
3 8 71
4 7 24
...

correct output
95

user output
95
time: 0.084417289

Test 5

Verdict:

input
10 20
1 8 22
6 7 40
4 5 20
8 10 77
...

correct output
156

user output
156
time: 0.083251772

Test 6

Verdict:

input
100 1000
63 85 864540192
22 91 974117435
64 66 953124912
85 88 6080960
...

correct output
4397669179

user output
(empty)

Test 7

Verdict:

input
100 1000
36 93 760720873
12 75 175717522
78 79 340128710
80 83 181753465
...

correct output
5298558023

user output
(empty)

Test 8

Verdict:

input
100 1000
20 60 909693891
55 91 570199535
21 41 118646902
37 82 824735480
...

correct output
5466229311

user output
(empty)

Test 9

Verdict:

input
100 1000
26 44 753330451
62 67 821574279
70 95 219303983
7 44 980013084
...

correct output
4893925638

user output
(empty)

Test 10

Verdict:

input
100 1000
15 89 501388091
50 71 396801720
15 92 324349822
29 85 184420157
...

correct output
6956499595

user output
(empty)