CSES - Datatähti Open 2017 - Results
Submission details
Task:Tunnels
Sender:bciobanu
Submission time:2017-01-22 13:26:49 +0200
Language:C++
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
#30
Test results
testverdicttimegroup
#10.05 s1details
#20.04 s1details
#30.05 s1details
#40.04 s1details
#50.04 s1details
#60.05 s2details
#70.04 s2details
#80.03 s2details
#90.04 s2details
#100.06 s2details
#110.18 s3details
#120.09 s3details
#130.07 s3details
#140.07 s3details
#150.06 s3details

Code

#include <bits/stdc++.h>
#define SZ(x) ((int) (x).size())
using namespace std;

typedef long long int64;

const int NMAX = 100000;

vector<int> G[NMAX];
int leftPair[NMAX], rightPair[NMAX];
bool used[NMAX];

bool pairUp(const int& node) {
    if (used[node]) {
        return false;
    }
    used[node] = true;
    
    for (const int& to: G[node]) {
        if (rightPair[to] == -1) {
            leftPair[node] = to;
            rightPair[to] = node;
            return true;
        }    
    }
    
    for (const int& to: G[node]) {
        if (pairUp(rightPair[to])) {
            leftPair[node] = to;
            rightPair[to] = node;
            return true;
        }
    }
    return false;
}

int main(void) {
    cin.tie(0);
    ios_base::sync_with_stdio(false);
    
    int n, m; cin >> n >> m;
    for (int i = 0; i < m; i++) {
        int x, y; cin >> x >> y;
        G[x - 1].push_back(y - 1);
    }
    
    memset(leftPair, -1, 4 * n);
    memset(rightPair, -1, 4 * n);
    bool pushed;
    do {
        memset(used, 0, n);
        pushed = false;
        for (int i = 0; i < n; i++) {
            if (leftPair[i] == -1) {
                pushed |= pairUp(i);
            }
        }
    } while (pushed);
    
    int matching = 0;
    for (int i = 0; i < n; i++) {
        matching += (leftPair[i] != -1);
    }
    cout << (m - matching) << '\n';
}

Test details

Test 1

Group: 1

Verdict:

input
10 20
4 5
6 4
5 1
5 9
...

correct output
11

user output
14

Test 2

Group: 1

Verdict:

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

correct output
5

user output
4

Test 3

Group: 1

Verdict:

input
10 5
5 7
3 8
5 8
3 7
...

correct output
4

user output
2

Test 4

Group: 1

Verdict:

input
10 4
9 1
6 8
7 1
5 7

correct output
3

user output
1

Test 5

Group: 1

Verdict:

input
10 2
10 6
2 1

correct output
2

user output
0

Test 6

Group: 2

Verdict:

input
100 200
24 40
25 6
36 93
92 90
...

correct output
97

user output
136

Test 7

Group: 2

Verdict:

input
100 100
98 37
91 37
60 92
46 27
...

correct output
60

user output
53

Test 8

Group: 2

Verdict:

input
100 50
74 95
53 72
69 85
14 13
...

correct output
34

user output
20

Test 9

Group: 2

Verdict:

input
100 40
28 76
10 81
13 52
46 83
...

correct output
29

user output
14

Test 10

Group: 2

Verdict:

input
100 20
27 35
72 92
56 4
64 80
...

correct output
18

user output
1

Test 11

Group: 3

Verdict:

input
100000 200000
89244 59358
22943 56710
63331 89437
56581 38400
...

correct output
102510

user output
139063

Test 12

Group: 3

Verdict:

input
100000 100000
21701 85599
61542 21474
38081 29362
46316 64038
...

correct output
60593

user output
54702

Test 13

Group: 3

Verdict:

input
100000 50000
86469 4833
16351 35505
59315 33011
95464 16985
...

correct output
35933

user output
19587

Test 14

Group: 3

Verdict:

input
100000 40000
5392 23534
63204 45619
74330 25925
59678 88427
...

correct output
30074

user output
13767

Test 15

Group: 3

Verdict:

input
100000 20000
80156 16531
71753 77661
7028 33389
17168 646
...

correct output
16882

user output
4200