trafik

Untitled

May 11th, 2022 (edited)
330
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.00 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #define len(v) (int)v.size()
  4. using namespace std;
  5.  
  6. vector<vector<int>> g;
  7. vector<bool> used;
  8. vector<int> mt;
  9.  
  10. bool dfs(int v) {
  11.     if (used[v])
  12.         return false;
  13.     used[v] = true;
  14.     for (auto u : g[v]) {
  15.         if (mt[u] == -1 || dfs(mt[u])) {
  16.             mt[u] = v;
  17.             return true;
  18.         }
  19.     }
  20.     return false;
  21. }
  22.  
  23. int main() {
  24.     int n, m;
  25.     cin >> n >> m;
  26.     g.resize(n + 1);
  27.     used.resize(n + 1, false);
  28.     mt.resize(m + 1, -1);
  29.     for (int v = 1; v <= n; ++v) {
  30.         int u; cin >> u;
  31.         while (u != 0) {
  32.             g[v].push_back(u);
  33.             cin >> u;
  34.         }
  35.     }
  36.  
  37.     int ans = 0;
  38.     for (int v = 1; v <= n; ++v) {
  39.         for (int i = 0; i < len(used); ++i)
  40.             used[i] = false;
  41.         if (dfs(v))
  42.             ++ans;
  43.     }
  44.  
  45.     cout << ans << "\n";
  46.     for (int v = 1; v <= m; ++v) {
  47.         if (mt[v] != -1) {
  48.             cout << v << " " << mt[v] << "\n";
  49.         }
  50.     }
  51. }
Add Comment
Please, Sign In to add comment