Advertisement
Mlxa

Kuhn.cpp

Jan 10th, 2018
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.73 KB | None | 0 0
  1. #include <cassert>
  2. #include <cstdio>
  3. #include <cmath>
  4. #include <iostream>
  5. #include <vector>
  6. #include <set>
  7. #include <algorithm>
  8. #include <cstring>
  9. using namespace std;
  10.  
  11. typedef int ll;
  12. namespace Mlxa
  13. {
  14.     #define read cin
  15.     #define eol '\n'
  16.     #define endln cout << eol
  17.  
  18.     template <class A> inline void print (A a) { cout << a << ' '; }
  19.     template <class A> inline void println (A a) { cout << a << eol; }
  20.     template <class A, class... B> inline void println (A a, B... b) { print(a), println(b...); }
  21.     template <class A> void printseq (A b, A e) { for (A i(b); i != e; ++ i) print(*i); endln; }
  22.     #define w(...) println(__VA_ARGS__)
  23.     #ifdef AC
  24.         #define ndb(a) println("[NDB]", #a, "=", a)
  25.         #define db(...) println("[MDB]", __VA_ARGS__)
  26.     #else
  27.         #define ndb(a) ((void)0)
  28.         #define db(...) ((void)0)
  29.     #endif
  30.     #define fastIO cin.tie(nullptr), ios_base::sync_with_stdio(false)
  31.     #define all(x) begin(x), end(x)
  32.     #define pb push_back
  33. } using namespace Mlxa;
  34.  
  35. const ll N(2019);
  36. ll n, m;
  37.  
  38. typedef set<ll> Graph[N]; // vector?
  39. Graph G, H;
  40.  
  41. ll mt[N];
  42. char used[N];
  43. char cused[N];
  44.  
  45. bool kun (ll v)
  46. {
  47.     if (used[v] || cused[v]) return false;
  48.     cused[v] = true;
  49.     for (ll to : H[v])
  50.     if (mt[to] < 0 || kun(mt[to])) {
  51.         mt[to] = v;
  52.         return true;
  53.     }   return false;
  54. }
  55.  
  56. ll pairSize(0);
  57.  
  58. ll countWays (ll i)
  59. {
  60.     fill(cused, cused + N, 0);
  61.     if (kun(i)) ++ pairSize, used[i] = true;
  62.     ll ans = n - pairSize;
  63.     return ans;
  64. }
  65.  
  66. int main ()
  67. {
  68.     fastIO;
  69.     fill(mt, mt + N, -1);
  70.     fill(used, used + N, 0);
  71.     read >> n >> m;
  72.     for (ll i, j, k(m); k --; ) {
  73.         read >> i >> j;
  74.         H[i].insert(j + n);
  75.         H[j].insert(i + n);
  76.         print(countWays(i));
  77.     } endln;
  78.     return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement