Submission details
Task:Internet connection
Sender:niketin
Submission time:2020-09-19 15:25:11 +0300
Language:C++ (C++17)
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.01 sdetails
#2ACCEPTED0.01 sdetails
#3ACCEPTED0.01 sdetails
#4ACCEPTED0.01 sdetails
#5ACCEPTED0.01 sdetails
#6ACCEPTED0.01 sdetails
#70.01 sdetails
#8ACCEPTED0.01 sdetails
#9ACCEPTED0.01 sdetails
#10ACCEPTED0.01 sdetails
#11ACCEPTED0.01 sdetails
#12ACCEPTED0.01 sdetails
#13ACCEPTED0.01 sdetails
#14ACCEPTED0.01 sdetails
#15ACCEPTED0.01 sdetails
#16ACCEPTED0.01 sdetails
#17ACCEPTED0.01 sdetails
#18ACCEPTED0.01 sdetails
#19ACCEPTED0.01 sdetails
#20ACCEPTED0.01 sdetails
#21ACCEPTED0.01 sdetails
#22ACCEPTED0.01 sdetails

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:73:37: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (long long int v = 0; v < g[u].size(); v++) {
                                   ~~^~~~~~~~~~~~~

Code

#include <iostream>
#include <algorithm>
#include <string>
#include <bits/stdc++.h>
#define N 1000
using namespace std;

vector<long long int> g[N];
map<pair<long long int, long long int>, long long int> weights;
map<pair<long long int, long long int>, long long int> flow;

vector<pair<long long int, long long int>> bfs(long long int s, long long int t) {
    queue<long long int> q;
    vector<bool> vis(N);

    map<long long int, vector<long long int>> mm;
    
    q.push(s);
    while( not q.empty()) {
        auto u = q.front();
        q.pop();

        if (u == t) {
            vector<pair<long long int, long long int>> res;
            while (true) {
                if (u == s) {
                    reverse(res.begin(), res.end());
                    return res;
                }
                long long int v = mm[u].front();
                res.push_back(make_pair(v, u));
                u = v;
            }
        }

        if (not vis[u]) {
            vis[u] = true;
            for(auto &v: g[u]) {
                if (weights[make_pair(u, v)] - flow[make_pair(u, v)] > 0 and not vis[v]) {
                    q.push(v);
                    if (mm.find(v) == mm.end()) {
                        vector<long long int> xxx = {u};
                        mm[v] = xxx;
                    }else {
                        mm[v].push_back(u);

                    }
                }
            }
        }
    }
    return vector<pair<long long int, long long int>>();
}


int main()
{
    long long int n, m; // n vertices, m edges

    // build up the
    cin >> n >> m;

    for (long long int i = 0; i < m; i++)
    {
        long long int v, w, c;
        cin >> v >> w >> c;
        g[v].push_back(w);
        //g[w].push_back(v);
        weights[make_pair(v, w)] = c;
    }

    for (long long int u = 0; u < n; u++) {
        for (long long int v = 0; v < g[u].size(); v++) {
            if (g[u][v] == 0) {
                break;
            }
            flow[make_pair(u, v)] = 0;
            flow[make_pair(v, u)] = 0;
        }
    
    }



    while (true) {
        auto v = bfs(1, n);
        if (v.empty()) {
            break;
        }

        auto smallestpair = *min_element(v.begin(), v.end(), [&](const pair<long long int, long long int> &a, const pair<long long int, long long int> &b){ return weights[a] - flow[a] < weights[b] - flow[b];});
        auto cfp = weights[smallestpair] - flow[smallestpair];

        for (auto &i : v) {
            auto u = i.first;
            auto v = i.second;
            flow[make_pair(u, v)] = flow[make_pair(u, v)] + cfp; 
            flow[make_pair(v, u)] = flow[make_pair(v, u)] - cfp;
        }
    }

    long long int s = 0;
    for (auto & gg: g[1]) {
        s += flow[make_pair(1, gg)];
    }
    cout << s << endl;
    return 0;
}

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: ACCEPTED

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

correct output
4397669179

user output
4397669179

Test 7

Verdict:

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

correct output
5298558023

user output
4929538366

Test 8

Verdict: ACCEPTED

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

correct output
5466229311

user output
5466229311

Test 9

Verdict: ACCEPTED

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

correct output
4893925638

user output
4893925638

Test 10

Verdict: ACCEPTED

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

correct output
6956499595

user output
6956499595

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: ACCEPTED

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

correct output
98000000000

user output
98000000000

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