Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #pragma comment(linker, "/stack:200000000")
- #pragma GCC optimize("Ofast,no-stack-protector")
- #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
- #pragma GCC optimize("unroll-loops")
- #pragma GCC optimize("fast-math")
- using namespace std;
- const int MAXN = 202;
- int a, b, n, m;
- bool adj[MAXN][MAXN];
- int kek[MAXN];
- bool used[MAXN];
- int cnt = 0;
- bool kuhn(int v) {
- used[v] = true;
- for (int i = a + 1; i <= n; i++) {
- if (!adj[i][v]) continue;
- if (!used[i]) {
- if (kek[i] == 0 || kuhn(kek[i])) {
- kek[i] = v;
- return true;
- }
- }
- }
- return false;
- }
- int main() {
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- cout.tie(0);
- cin >> a >> b >> m;
- n = a + b;
- for (int i = 0; i < m; i++) {
- int u, v;
- cin >> u >> v;
- v += a;
- adj[v][u] = true;
- }
- for (int i = 1; i <= a; i++) {
- memset(used, false, n);
- if (kek[i] == 0) {
- if (kuhn(i)) {
- cnt++;
- }
- }
- }
- cout << cnt << '\n';
- for (int i = a + 1; i <= n; i++) {
- if (kek[i] != 0) {
- cout << kek[i] << ' ' << i - a << '\n';
- }
- }
- fflush(stdout);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment