Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <vector>
- #include <algorithm>
- using namespace std;
- char Kun(const vector<vector<int>> &vert, int v, vector<char> &used, vector<int> &matched)
- {
- if (used[v])
- return 0;
- used[v] = 1;
- for (int i = 0; i < vert[v].size(); i++)
- if ((matched[vert[v][i]] == -1) || (Kun(vert, matched[vert[v][i]], used, matched)))
- {
- matched[vert[v][i]] = v;
- return 1;
- }
- return 0;
- }
- int main()
- {
- ifstream fcin("matching.in");
- ofstream fcout("matching.out");
- int n, m, k;
- fcin >> n >> m >> k;
- vector<vector<int>> vert(n);
- for (int i = 0; i < k; i++)
- {
- int in, out;
- fcin >> out >> in;
- vert[out - 1].push_back(in - 1);
- }
- vector<char> used(n, 0);
- vector<int> matched(m, -1);
- for (int v = 0; v < n; v++) {
- used.assign(n, 0);
- Kun(vert, v, used, matched);
- }
- int matches = 0;
- for (int i = 0; i < m; i++)
- matches += (matched[i] != -1);
- fcout << matches;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement