Advertisement
Luc1Ferrr

Kuhn

Feb 29th, 2020
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.19 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define maxx 100005
  3. #define inf 2000000000
  4. #define mod 1000000007
  5. #define pii pair<int,int>
  6. #define piii pair<pii,pii>
  7. #define pli pair<long long,int>
  8. #define f first
  9. #define s second
  10. #define in(x) scanf("%d",&x)
  11. #define IN(x) scanf("%lld",&x)
  12. #define inch(x) scanf("%s",x)
  13. #define indo(x) scanf("%lf",&x)
  14. #define pb push_back
  15.  
  16. typedef long long ll;
  17. typedef unsigned long long ull;
  18.  
  19. using namespace std;
  20.  
  21. int n, m, k, a, b, max_matching;
  22. vector<int>g[105], used, R;
  23.  
  24. int dfs(int node){
  25.     if(used[node]) return 0;
  26.     used[node] = 1;
  27.     for(int i = 0; i < g[node].size(); i++){
  28.         int to = g[node][i];
  29.         if((R[to] == -1) || dfs(R[to])){
  30.             R[to] = node;
  31.             return 1;
  32.         }
  33.     }
  34.     return 0;
  35. }
  36.  
  37. void Augmented_Path(){
  38.     R.assign(m + 1, -1);
  39.     for(int i = 1; i <= n; i++){
  40.         used.assign(n + 1, 0);
  41.         if(dfs(i))
  42.             max_matching++;
  43.     }
  44. }
  45.  
  46. int main()
  47. {
  48.   in(n); in(m); in(k);
  49.   while(k --){
  50.     in(a); in(b);
  51.     g[a].pb(b);
  52.   }
  53.  
  54.   Augmented_Path();
  55.   printf("%d\n",max_matching);
  56.   for(int i = 1; i <= m; i++)
  57.     if(R[i] != -1)
  58.     printf("%d %d\n", R[i], i);
  59.   return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement