QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#665715 | #898. 二分图最大匹配 | Zhou_JK | WA | 115ms | 12408kb | C++23 | 1.6kb | 2024-10-22 14:55:03 | 2024-10-22 14:55:07 |
Judging History
answer
#include <cassert>
#include <iostream>
#include <vector>
using namespace std;
struct augment_path {
vector<vector<int>> g;
vector<int> pa; // 匹配
vector<int> pb;
vector<int> vis; // 访问
int n, m; // 顶点和边的数量
int dfn; // 时间戳记
int res; // 匹配数
augment_path(int _n, int _m) : n(_n), m(_m) {
assert(0 <= n && 0 <= m);
pa = vector<int>(n, -1);
pb = vector<int>(m, -1);
vis = vector<int>(n);
g.resize(n);
res = 0;
dfn = 0;
}
void add(int from, int to) {
assert(0 <= from && from < n && 0 <= to && to < m);
g[from].push_back(to);
}
bool dfs(int v) {
vis[v] = dfn;
for (int u : g[v]) {
if (pb[u] == -1) {
pb[u] = v;
pa[v] = u;
return true;
}
}
for (int u : g[v]) {
if (vis[pb[u]] != dfn && dfs(pb[u])) {
pa[v] = u;
pb[u] = v;
return true;
}
}
return false;
}
int solve() {
while (true) {
dfn++;
int cnt = 0;
for (int i = 0; i < n; i++) {
if (pa[i] == -1 && dfs(i)) {
cnt++;
}
}
if (cnt == 0) {
break;
}
res += cnt;
}
return res;
}
};
int main() {
int n, m, e;
cin >> n >> m >> e;
augment_path solver(n, m);
int u, v;
for (int i = 0; i < e; i++) {
cin >> u >> v;
solver.add(u, v);
}
cout << solver.solve() << "\n";
for (int i = 0; i < n; i++) {
cout << solver.pa[i] << " ";
}
cout << "\n";
}
详细
Test #1:
score: 0
Wrong Answer
time: 115ms
memory: 12408kb
input:
100000 100000 200000 78474 45795 32144 46392 92549 13903 73460 34144 96460 92850 56318 77066 77529 84436 76342 51542 77506 99268 76410 89381 1778 61392 43607 96135 84268 74827 14857 35966 32084 94908 19876 174 1481 94390 12423 55019 64368 92587 81295 7902 25432 46032 36293 61128 73555 84836 8418 102...
output:
100000 54731 26066 89637 1717 68505 28330 55261 34703 42170 23249 90437 69580 72086 47593 29944 87183 763 2814 46044 75228 11487 72701 60611 36775 66081 45592 3321 88211 71467 47516 55528 83162 46298 26459 78669 8248 64341 49520 43460 95658 79534 61151 39539 56783 38115 73315 38611 35659 71087 78866...
result:
wrong answer Matching is incorrect (54731, 26066)