Ahmed_Negm

Untitled

Aug 3rd, 2025
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.63 KB | None | 0 0
  1. struct HopcroftKarp{
  2.     int n, m;
  3.     vector<vector<int>> adj;
  4.     vector<int> match, level;
  5.     vector<bool> vis;
  6.  
  7.     HopcroftKarp(int n, int m): n(n), m(m){
  8.         adj.resize(n);
  9.         match.assign(n + m, -1);
  10.         level.resize(n);
  11.         vis.resize(n);
  12.     }
  13.  
  14.     void addEdge(int u, int v){
  15.         adj[u].push_back(v + n);
  16.     }
  17.  
  18.     bool bfs(){
  19.         fill(level.begin(), level.end(), -1);
  20.         queue<int> q;
  21.         for(int i = 0; i < n; i++){
  22.             if(match[i] == -1){
  23.                 level[i] = 0;
  24.                 q.push(i);
  25.             }
  26.         }
  27.         while(!q.empty()){
  28.             int u = q.front();
  29.             q.pop();
  30.             for(int v : adj[u]){
  31.                 if(match[v] == -1){
  32.                     return true;
  33.                 }
  34.                 if(level[match[v]] == -1){
  35.                     level[match[v]] = level[u] + 1;
  36.                     q.push(match[v]);
  37.                 }
  38.             }
  39.         }
  40.         return false;
  41.     }
  42.  
  43.     bool dfs(int u){
  44.         vis[u] = true;
  45.         for(int v : adj[u]){
  46.             if(match[v] == -1 || (!vis[match[v]] && level[match[v]] == level[u] + 1 && dfs(match[v]))){
  47.                 match[u] = v;
  48.                 match[v] = u;
  49.                 return true;
  50.             }
  51.         }
  52.         return false;
  53.     }
  54.  
  55.     int maxMatching(){
  56.         int ans = 0;
  57.         while(bfs()){
  58.             fill(vis.begin(), vis.end(), false);
  59.             for(int i = 0; i < n; i++){
  60.                 if(match[i] == -1 && dfs(i)){
  61.                     ans++;
  62.                 }
  63.             }
  64.         }
  65.         return ans;
  66.     }
  67. };
Advertisement
Add Comment
Please, Sign In to add comment