QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#660012 | #7898. I Just Want... One More... | fosov | TL | 43ms | 6788kb | C++14 | 3.6kb | 2024-10-20 02:13:10 | 2024-10-20 02:13:11 |
Judging History
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;
}
}
}
return dis[t] != inf;
}
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;
int sflow;
while (bfs(s, t)) while (sflow = dfs(s, t, inf)) flow += sflow;
}
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;
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 6788kb
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: 6628kb
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: 11ms
memory: 6556kb
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: 20ms
memory: 5316kb
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: 26ms
memory: 6240kb
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: 41ms
memory: 6228kb
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: 42ms
memory: 6392kb
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: 43ms
memory: 6292kb
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 ...