Submission details
Task:Download Speed
Sender:Ciphra
Submission time:2025-10-23 11:06:08 +0300
Language:C++ (C++17)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.01 sdetails
#2ACCEPTED0.01 sdetails
#3ACCEPTED0.01 sdetails
#4ACCEPTED0.01 sdetails
#5ACCEPTED0.01 sdetails
#6ACCEPTED0.01 sdetails
#7ACCEPTED0.01 sdetails
#8ACCEPTED0.01 sdetails
#9ACCEPTED0.01 sdetails
#10ACCEPTED0.01 sdetails
#11ACCEPTED0.01 sdetails
#12ACCEPTED0.01 sdetails

Code

#include <algorithm>
#include <iostream>
#include <limits>
#include <vector>


const int N = 501;
std::vector<int> adj[N];
long long capPerCheckpoint[N];

long long dfsWithFlow(int u, long long flow, int t, bool visited[N], long long capacity[N][N]) {
  if (u == t) return flow;
  visited[u] = true;

  for (int v : adj[u]) {
    if (!visited[v] && capacity[u][v] > 0) {
      long long pushed = dfsWithFlow(v, std::min(flow, capacity[u][v]), t, visited, capacity);
      if (pushed > 0) {
        capacity[u][v] -= pushed;
        capacity[v][u] += pushed;
        return pushed;
      }
    }
  }
  return 0; // no flow
}

long long maxflow(int s, int t, long long capacity[N][N]) {
  long long flow = 0;
  
  // push till no augmenting path is availabl
  while (true) {
    bool visited[N] = {false};
    long long pushed = dfsWithFlow(s, std::numeric_limits<long long>::max(), t, visited, capacity);
    if (pushed == 0) break; 
    flow += pushed;
  }

  return flow;
}

int main() {
  int n, m;
  std::cin >> n >> m;

  int s = 1;
  int t = n;

  long long capacity[N][N] = {{0}};


  for (int i = 0; i < m; ++i) {
    int a, b;
    long long c;
    std::cin >> a >> b >> c;
    adj[a].push_back(b);
    adj[b].push_back(a); //residual graph
    capacity[a][b] += c;
  }

  long long f = maxflow(s, t, capacity);
  std::cout << f << "\n";
}



Test details

Test 1

Verdict: ACCEPTED

input
4 3
1 2 5
2 3 3
3 4 6

correct output
3

user output
3

Test 2

Verdict: ACCEPTED

input
4 5
1 2 1
1 3 1
2 3 1
2 4 1
...

correct output
2

user output
2

Test 3

Verdict: ACCEPTED

input
4 5
1 2 1000000000
1 3 1000000000
2 3 1
2 4 1000000000
...

correct output
2000000000

user output
2000000000

Test 4

Verdict: ACCEPTED

input
2 1
2 1 100

correct output
0

user output
0

Test 5

Verdict: ACCEPTED

input
2 1000
1 2 1000000000
1 2 1000000000
1 2 1000000000
1 2 1000000000
...

correct output
1000000000000

user output
1000000000000

Test 6

Verdict: ACCEPTED

input
500 998
1 2 54
1 3 59
1 4 83
2 5 79
...

correct output
60

user output
60

Test 7

Verdict: ACCEPTED

input
500 998
1 2 530873053
1 3 156306296
1 4 478040476
3 5 303609600
...

correct output
1093765123

user output
1093765123

Test 8

Verdict: ACCEPTED

input
2 1
1 2 1

correct output
1

user output
1

Test 9

Verdict: ACCEPTED

input
4 5
1 2 3
2 4 2
1 3 4
3 4 5
...

correct output
6

user output
6

Test 10

Verdict: ACCEPTED

input
4 5
1 2 1
1 3 2
3 2 1
2 4 2
...

correct output
3

user output
3

Test 11

Verdict: ACCEPTED

input
10 999
1 2 1000000000
1 2 1000000000
1 2 1000000000
1 2 1000000000
...

correct output
111000000000

user output
111000000000

Test 12

Verdict: ACCEPTED

input
7 9
1 2 1
1 3 1
1 4 1
2 5 1
...

correct output
2

user output
2