Advertisement
MinhNGUYEN2k4

Untitled

Dec 28th, 2021
1,171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.24 KB | None | 0 0
  1. //Dai Ca Di Hoc
  2. #include <bits/stdc++.h>
  3. #define sz(x) int(x.size())
  4. #define reset(x) memset(x, 0,sizeof(x))
  5. #define Rep(i,n) for(int (i)=0;(i)<(int)(n);++(i))
  6. #define For(i,l,u) for(int (i)=(int)(l);(i)<=(int)(u);++(i))
  7. #define MIN(x,y) if (x > (y)) x = (y)
  8. #define MAX(x,y) if (x < (y)) x = (y)
  9. #define PB push_back
  10. #define mp make_pair
  11. #define F first
  12. #define S second
  13. #define maxn 100005
  14. #define MOD 1000000007
  15. #define remain(x) if (x > MOD) x -= MOD
  16. #define pii pair<int, int>
  17. #define ll long long
  18. #define Task "assign"
  19.  
  20. using namespace std;
  21.  
  22. int n, m, res = 0, cur;
  23. vector <int> ke[maxn];
  24. int MatchX[maxn], Used[maxn];
  25.  
  26. bool DFS(int u){
  27.     if (Used[u] == cur) return 0;
  28.     Used[u] = cur;
  29.     for (int v : ke[u])
  30.         if (MatchX[v] == 0|| DFS(MatchX[v])){
  31.             MatchX[v] = u;
  32.             return 1;
  33.         }
  34.     return 0;
  35. }
  36.  
  37.  
  38. int main()
  39. {
  40.     ios_base::sync_with_stdio(0); cin.tie(); cout.tie();
  41.     freopen(Task".inp", "r", stdin);
  42.     freopen(Task".out", "w", stdout);
  43.     cin >> m >> n;
  44.     int u, v;
  45.     while (cin >> u >> v) ke[u].PB(v);
  46.     for (cur = 1; cur <= m; cur++)
  47.         res += DFS(cur);
  48.     cout << res << endl;
  49.     for (int i = 1; i <= n; i++) cout << MatchX[i] << " ";
  50.     return 0;
  51. }
  52.  
  53.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement