Advertisement
Elsas

Algo12B

May 4th, 2020
337
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.08 KB | None | 0 0
  1. #include <fstream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. char Kun(const vector<vector<int>> &vert, int v, vector<char> &used, vector<int> &matched)
  8. {
  9.     if (used[v])
  10.         return 0;
  11.     used[v] = 1;
  12.    
  13.     for (int i = 0; i < vert[v].size(); i++)
  14.         if ((matched[vert[v][i]] == -1) || (Kun(vert, matched[vert[v][i]], used, matched)))
  15.         {
  16.             matched[vert[v][i]] = v;
  17.             return 1;
  18.         }
  19.  
  20.     return 0;
  21. }
  22.  
  23. int main()
  24. {
  25.     ifstream fcin("matching.in");
  26.     ofstream fcout("matching.out");
  27.  
  28.     int n, m, k;
  29.     fcin >> n >> m >> k;
  30.     vector<vector<int>> vert(n);
  31.  
  32.     for (int i = 0; i < k; i++)
  33.     {
  34.         int in, out;
  35.         fcin >> out >> in;
  36.         vert[out - 1].push_back(in - 1);
  37.     }
  38.  
  39.     vector<char> used(n, 0);
  40.     vector<int> matched(m, -1);
  41.  
  42.     for (int v = 0; v < n; v++) {
  43.         used.assign(n, 0);
  44.         Kun(vert, v, used, matched);
  45.     }
  46.  
  47.     int matches = 0;
  48.     for (int i = 0; i < m; i++)
  49.         matches += (matched[i] != -1);
  50.  
  51.     fcout << matches;
  52.  
  53.     return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement