QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#660014#7898. I Just Want... One More...fosovTL 38ms6904kbC++143.6kb2024-10-20 02:16:182024-10-20 02:16:18

Judging History

你现在查看的是最新测评结果

  • [2024-10-20 02:16:18]
  • 评测
  • 测评结果:TL
  • 用时:38ms
  • 内存:6904kb
  • [2024-10-20 02:16:18]
  • 提交

answer

#include "bits/stdc++.h"
using namespace std;

#define ll long long
#define MOD ((int) (1e9) + 7)
#define pii pair<int, int>

#define N 100010
#define inf 0x7fffffff

struct Edge {
    int u, v, c, nxt;
    Edge(): u(0), v(0), c(0), nxt(0) {};
    Edge(int u, int v, int c, int nxt): u(u), v(v), c(c), nxt(nxt) {};
};

struct MaxFlow {
    int n, m;

    Edge E[N];
    int h[N], cur[N], dis[N], flow;
    int q[N], ql, qr;
    bool inS[N], inT[N];
    
    void init(int n) {
        this->n = n;
        this->m = 2;
        for (int i = 1; i <= n; ++ i) h[i] = 0;
    }

    void add_edge(int u, int v, int c) {
        E[m] = Edge(u, v, c, h[u]), h[u] = m ++; 
        E[m] = Edge(v, u, 0, h[v]), h[v] = m++;
    }

    bool bfs(int s, int t) {
        for (int i = 1; i <= n; ++ i) dis[i] = inf;

        ql = qr = 0;
        q[qr ++] = s;
        dis[s] = 0, cur[s] = h[s];

        while (ql < qr) {
            int u = q[ql ++];
            for (int i = h[u]; i; i = E[i].nxt) {
                auto& [_, v, c, __] = E[i];
                if (c && dis[v] == inf) {
                    dis[v] = dis[u] + 1;
                    cur[v] = h[v];
                    q[qr ++] = v;
                    if (v == t) return 1;
                }
            }
        }

        return 0;
    }

    int dfs(int u, int t, int in) {
        if (u == t) return in;
        if (dis[u] >= dis[t]) return 0;

        int out = 0;
        for (int i = cur[u]; i && in > out; i = E[i].nxt) {
            cur[u] = i;
            auto& [_, v, c, __] = E[i];
            if (dis[v] == dis[u] + 1 && c) {
                int vout = dfs(v, t, min(in - out, c));
                if (!vout) dis[v] = -1;
                E[i].c -= vout, E[i^1].c += vout, out += vout;
            }
        }
        return out;
    }

    void go(int s, int t) {
        flow = 0;
        while (bfs(s, t)) flow += dfs(s, t, inf);
    }

    void revisit(int s, int t) {
        for (int i = 1; i <= n; ++ i) inS[i] = inT[i] = 0;

        ql = qr = 0;
        q[qr ++] = s;
        inS[s] = 1;
        while (ql < qr) {
            int u = q[ql ++];
            for (int i = h[u]; i; i = E[i].nxt) {
                auto& [_, v, c, __] = E[i];
                if (c && !inS[v]) {
                    q[qr ++] = v;
                    inS[v] = 1;
                }
            }
        }

        ql = qr = 0;
        q[qr ++] = t;
        inT[t] = 1;
        while (ql < qr) {
            int u = q[ql ++];
            for (int i = h[u]; i; i = E[i].nxt) {
                auto& [v, _, c, __] = E[i^1];
                if (c && !inT[v]) {
                    q[qr ++] = v;
                    inT[v] = 1;
                }
            }
        }
    } 
} mf;

int main() {
#ifdef TEST
    freopen("zz.in", "r+", stdin);
#endif
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int t; cin >> t;
    while (t --) {
        int n, m; cin >> n >> m;
        int s = 2*n+1, t = s+1;

        mf.init(t);
        for (int i = 1; i <= n; ++ i) mf.add_edge(s, i, 1);
        for (int i = n+1; i <= 2*n; ++ i) mf.add_edge(i, t, 1);
        for (int i = 0; i < m; ++ i) {
            int u, v; cin >> u >> v; v += n;
            mf.add_edge(u, v, 1);
        }

        mf.go(s, t);
        mf.revisit(s, t);

        int Us = 0, Vs = 0;
        for (int i = 1; i <= n; ++ i) Us += mf.inS[i];
        for (int i = n+1; i <= 2*n; ++ i) Vs += mf.inT[i];

        cout << 1ll * Us * Vs << '\n';
    }


    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 5244kb

input:

3
4 3
1 2
3 2
4 3
3 3
1 3
2 2
3 1
3 2
1 2
1 2

output:

6
0
4

result:

ok 3 number(s): "6 0 4"

Test #2:

score: 0
Accepted
time: 6ms
memory: 6216kb

input:

10000
5 4
2 2
3 1
5 3
1 1
1 1
1 1
1 1
1 1
2 2
2 2
1 2
1 1
1 1
1 1
1 1
1 1
1 1
2 3
2 1
1 2
1 1
5 5
1 4
2 2
3 1
1 3
1 2
2 4
2 2
2 1
1 2
1 1
5 1
5 3
3 1
2 2
1 1
1 1
3 2
3 1
2 1
5 2
1 2
2 3
5 3
1 5
4 2
1 2
4 1
1 1
2 3
1 1
2 2
2 1
4 1
1 4
3 1
1 1
1 1
1 1
2 1
2 2
3 3
1 3
2 3
2 2
3 3
1 3
3 3
1 2
3 3
2 2
1 ...

output:

6
0
0
2
0
0
0
0
6
0
16
4
0
6
9
9
9
0
9
4
0
1
1
1
0
4
16
12
3
2
16
0
2
2
20
1
0
0
0
0
16
4
4
16
4
9
0
9
0
2
3
0
9
4
9
16
20
0
0
1
12
0
1
2
0
0
1
0
0
2
2
4
0
12
1
0
0
2
1
2
2
3
0
4
1
6
0
0
0
0
9
16
2
0
1
2
0
12
2
4
0
12
1
1
9
4
6
9
9
12
3
16
15
16
9
4
9
0
1
16
9
9
1
9
16
9
12
4
9
2
0
4
0
6
0
3
0
0
0
0...

result:

ok 10000 numbers

Test #3:

score: 0
Accepted
time: 6ms
memory: 5948kb

input:

10000
8 1
8 7
8 6
4 5
8 8
6 6
5 3
6 3
8 6
2 3
1 2
2 2
2 1
4 5
1 3
1 2
2 3
1 1
3 3
8 8
4 3
7 3
1 6
5 4
6 3
2 2
6 7
2 5
1 1
1 1
10 2
4 7
9 7
8 10
5 5
5 1
5 2
4 1
3 5
2 4
5 4
6 3
6 4
2 8
10 5
6 10
6 1
7 2
6 6
8 10
8 3
8 4
5 8
2 5
7 1
5 7
5 8
4 2
2 2
5 3
3 4
3 3
4 4
2 5
1 2
1 1
1 1
5 8
4 3
2 4
5 3
2 3
2...

output:

49
16
0
9
16
0
90
18
56
25
36
4
0
6
56
24
9
24
1
9
0
4
90
6
1
30
30
4
0
0
49
15
30
35
20
9
9
36
16
6
35
4
49
24
81
3
0
12
72
36
30
12
9
36
10
2
30
0
0
0
35
0
1
8
0
0
15
6
0
25
49
0
0
3
1
0
8
16
20
0
36
81
0
3
9
30
8
36
0
25
0
49
16
1
0
16
0
0
0
25
8
0
64
64
0
64
9
6
0
81
45
36
16
0
1
25
49
8
4
2
20
...

result:

ok 10000 numbers

Test #4:

score: 0
Accepted
time: 19ms
memory: 6580kb

input:

10000
11 9
7 5
4 4
4 11
9 7
1 3
9 5
4 9
8 3
7 6
9 7
3 3
4 5
6 2
6 9
2 7
5 9
6 7
8 6
4 7
2 5
6 5
5 8
7 5
6 3
18 1
14 8
17 12
2 11
14 4
8 16
16 1
16 3
3 9
3 2
14 8
6 7
6 16
9 10
9 16
13 1
2 8
9 5
6 2
6 4
5 2
9 7
1 7
7 6
1 7
3 5
1 3
6 4
5 1
5 7
16 7
7 6
6 13
15 7
16 6
8 6
9 1
15 3
18 5
7 17
10 16
16 10...

output:

80
16
20
289
130
144
42
15
169
210
2
36
99
28
144
12
56
169
0
42
36
289
100
70
0
225
81
12
42
4
225
0
12
0
12
168
100
72
289
144
210
100
18
80
110
180
210
0
35
0
64
0
0
130
144
0
40
144
20
0
20
2
121
108
120
132
12
120
42
81
182
9
196
0
0
0
9
99
0
110
132
21
96
0
0
72
8
108
132
25
196
42
221
49
1
72...

result:

ok 10000 numbers

Test #5:

score: 0
Accepted
time: 28ms
memory: 6904kb

input:

10000
17 13
2 9
7 12
1 10
9 15
16 9
10 11
10 4
6 4
10 15
16 13
15 11
11 11
1 12
9 19
9 1
7 2
4 2
4 8
3 9
1 2
3 2
2 8
4 4
3 7
1 7
3 1
9 2
3 4
8 3
2 5
2 3
9 7
8 5
23 25
15 14
14 9
20 17
7 15
20 5
9 22
19 4
1 3
5 18
22 23
17 7
19 5
4 11
22 20
11 4
8 21
7 17
2 12
6 6
11 3
3 14
11 14
3 20
15 5
6 5
27 15
...

output:

130
12
49
272
4
0
342
306
462
8
42
16
143
9
40
0
156
16
234
30
9
126
238
36
0
36
110
441
165
18
30
306
91
121
0
3
225
110
0
48
399
169
0
154
56
8
4
0
18
16
324
117
0
1
9
104
0
120
63
180
288
55
484
81
4
49
288
288
0
169
24
285
1
48
4
54
210
525
0
8
18
78
625
441
18
48
30
90
1
576
225
16
624
304
0
0
...

result:

ok 10000 numbers

Test #6:

score: 0
Accepted
time: 37ms
memory: 6324kb

input:

10000
16 17
13 12
13 9
8 10
13 15
10 2
13 7
7 14
2 11
6 9
7 11
1 3
8 7
9 1
6 7
1 11
6 4
14 13
10 3
6 2
9 6
2 3
19 3
1 18
14 4
2 2
16 1
1 2
20 24
15 7
1 16
7 5
15 9
5 8
11 6
18 11
18 17
4 15
2 17
11 5
15 14
20 7
3 13
10 10
7 14
20 3
16 16
17 17
19 17
4 16
17 7
16 14
7 1
31 32
26 6
6 3
7 31
12 18
11 9...

output:

70
49
256
225
72
420
625
0
48
132
0
0
70
112
132
0
24
0
182
8
238
2
342
0
32
0
72
357
0
60
156
399
126
784
72
7
266
25
783
28
208
529
20
104
441
30
255
0
1
725
0
16
324
16
0
0
70
36
2
210
40
224
28
289
484
54
380
255
0
20
1024
221
0
418
81
2
625
420
36
0
0
900
16
378
324
380
182
756
784
378
156
56
0...

result:

ok 10000 numbers

Test #7:

score: 0
Accepted
time: 38ms
memory: 5260kb

input:

8195
31 31
10 29
11 22
28 13
18 14
6 17
7 22
1 20
9 14
28 4
17 29
25 10
8 12
21 29
30 16
26 27
28 5
20 5
4 13
1 19
8 2
28 12
3 10
30 27
6 11
8 7
27 23
8 5
4 15
29 13
1 26
11 18
42 19
17 13
5 9
41 30
30 10
4 28
31 14
35 14
13 37
7 23
37 28
2 11
42 19
15 32
31 15
37 24
7 41
35 8
2 38
9 26
22 2
6 20
17...

output:

380
896
400
528
169
506
6
156
77
117
0
196
42
9
676
42
64
42
196
529
1024
132
729
784
44
400
0
30
96
2116
12
108
0
9
650
110
104
56
650
182
9
736
132
840
360
0
756
0
552
176
783
342
575
56
260
900
27
420
624
182
600
120
24
294
756
176
182
195
4
992
180
420
1722
14
400
16
306
6
96
154
440
638
120
104...

result:

ok 8195 numbers

Test #8:

score: 0
Accepted
time: 38ms
memory: 5808kb

input:

36
200 34923
19 6
111 30
122 58
130 123
79 127
51 17
77 115
180 115
135 39
59 17
6 92
164 83
191 61
135 194
21 53
118 131
99 32
115 128
136 73
149 164
80 61
143 172
183 67
178 34
141 11
63 158
198 99
136 181
199 154
51 124
181 143
196 73
129 36
103 26
20 132
113 184
70 21
54 95
151 64
20 85
9 118
31...

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
39601
39601
39601
39601
0
39601
39601
39601
39601
39601
39601
39601
39601
39601
39601
39601
39601
39601

result:

ok 36 numbers

Test #9:

score: -100
Time Limit Exceeded

input:

47
300 73618
107 45
10 195
243 73
94 169
32 105
204 216
195 153
120 31
175 135
145 78
234 209
118 28
60 136
231 58
187 136
151 217
176 160
91 269
9 6
62 262
45 37
258 86
54 3
9 71
74 291
180 162
97 238
12 124
205 106
26 48
95 188
25 231
190 208
164 86
202 258
177 102
99 210
259 159
293 269
241 22
9 ...

output:


result: