Submission details
Task:Internet connection
Sender:toothfairy
Submission time:2020-09-19 15:59:03 +0300
Language:C++ (C++11)
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.01 sdetails
#2ACCEPTED0.01 sdetails
#3ACCEPTED0.01 sdetails
#4ACCEPTED0.01 sdetails
#5ACCEPTED0.01 sdetails
#60.02 sdetails
#70.02 sdetails
#80.02 sdetails
#90.02 sdetails
#100.02 sdetails
#11ACCEPTED0.01 sdetails
#12ACCEPTED0.01 sdetails
#13ACCEPTED0.01 sdetails
#14ACCEPTED0.01 sdetails
#15ACCEPTED0.01 sdetails
#16ACCEPTED0.01 sdetails
#17ACCEPTED0.01 sdetails
#180.05 sdetails
#19ACCEPTED0.01 sdetails
#20ACCEPTED0.01 sdetails
#21ACCEPTED0.01 sdetails
#22ACCEPTED0.01 sdetails

Code

// #include <bits/stdc++.h>
#include <iostream> 
#include <limits> 
#include <cstring>
#include <queue> 
using namespace std;
#define V 100
// int M[100][100];
unsigned long R[100][100];
bool bfs(unsigned long R[V][V], int s, int t, int parent[]) {
    queue<int> q;
    vector<bool> vis(V);
    q.push(s);
    memset(parent, 0, sizeof(int) * (t + 1));
    while(!q.empty()) {
        int u = q.front();
        q.pop();
        // aceck around
        vis[u] = true;
        for (int v=0; v< (t + 1); v++) 
        {
            //std::cout << vis[v] << " " << u << " " << v << " " << R[u][v] << std::endl;
            if (vis[v] == false && R[u][v] > 0) 
            { 
                q.push(v); 
                parent[v] = u;
                //std::cout << v << " " << u << std::endl;
            }
        }
    }
    //cout << "visited " << vis[t] << endl;
    return (vis[t] == true); 
}
// Returns the maximum flow from s to t in the given graph 
int max_flow(unsigned long R[V][V], int s, int t) 
{ 
    int u, v; 
  
    int parent[V];  // This array is filled by BFS and to store path 
  
    int max_flow = 0;  // There is no flow initially 
  
    // Augment the flow while tere is path from source to sink 
    while (bfs(R, s, t, parent)) 
    { 
        // Find minimum residual capacity of the edges along the 
        // path filled by BFS. Or we can say find the maximum flow 
        // through the path found. 
        unsigned long path_flow = std::numeric_limits<unsigned long>::max(); 

        for (v=t; v!=s; v=parent[v]) 
        { 
            u = parent[v]; 
            path_flow = min(path_flow, R[u][v]); 
            //cout << path_flow << endl;
        } 
  
        for (v=t; v != s; v=parent[v]) 
        { 
            u = parent[v]; 
            R[u][v] -= path_flow; 
            R[v][u] += path_flow; 
            
        } 
  
        // Add path flow to overall flow 
        max_flow += path_flow; 
    } 
  
    // Return the overall flow 
    return max_flow; 
} 
int main() {
    int n, m;
    cin >> n >> m;
    // memset(M, 0, sizeof(int) * 100 * 100);
    memset(R, 0, sizeof(unsigned long) * 100 * 100);
    for (int i=0; i<m; i++) {
        int a, b, w;
        cin >> a >> b >> w;
        // M[a-1][b-1] = w;
        R[a-1][b-1] = w;
    }
    cout << max_flow(R, 0, n - 1);
}

Test details

Test 1

Verdict: ACCEPTED

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

correct output
73

user output
73

Test 2

Verdict: ACCEPTED

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

correct output
110

user output
110

Test 3

Verdict: ACCEPTED

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

correct output
29

user output
29

Test 4

Verdict: ACCEPTED

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

correct output
95

user output
95

Test 5

Verdict: ACCEPTED

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

correct output
156

user output
156

Test 6

Verdict:

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

correct output
4397669179

user output
102701883

Test 7

Verdict:

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

correct output
5298558023

user output
1003590727

Test 8

Verdict:

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

correct output
5466229311

user output
1171262015

Test 9

Verdict:

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

correct output
4893925638

user output
598958342

Test 10

Verdict:

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

correct output
6956499595

user output
-1633434997

Test 11

Verdict: ACCEPTED

input
2 1
1 2 1

correct output
1

user output
1

Test 12

Verdict: ACCEPTED

input
2 1
2 1 1

correct output
0

user output
0

Test 13

Verdict: ACCEPTED

input
2 2
1 2 1
2 1 1

correct output
1

user output
1

Test 14

Verdict: ACCEPTED

input
100 1000
1 2 539540023
2 3 244306651
3 4 253259012
3 5 630461598
...

correct output
0

user output
0

Test 15

Verdict: ACCEPTED

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

correct output
4

user output
4

Test 16

Verdict: ACCEPTED

input
2 0

correct output
0

user output
0

Test 17

Verdict: ACCEPTED

input
100 0

correct output
0

user output
0

Test 18

Verdict:

input
100 196
1 2 1000000000
2 100 1000000000
1 3 1000000000
3 100 1000000000
...

correct output
98000000000

user output
-784247808

Test 19

Verdict: ACCEPTED

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

correct output
1000000000

user output
1000000000

Test 20

Verdict: ACCEPTED

input
2 2
2 1 1
1 2 1

correct output
1

user output
1

Test 21

Verdict: ACCEPTED

input
4 6
1 2 1000000000
1 3 1000000000
2 3 1
2 4 1000000000
...

correct output
2000000000

user output
2000000000

Test 22

Verdict: ACCEPTED

input
4 6
1 2 1000000000
1 3 1000000000
2 4 1000000000
2 3 1
...

correct output
2000000000

user output
2000000000