Advertisement
Jasir

Bipartite match

Oct 3rd, 2018
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.84 KB | None | 0 0
  1. // First one as a matrix. Geeks for geeks
  2. int bpGraph[104][104], seen[104];
  3. int matchR[104];
  4. int n;
  5.  
  6. pii stu[104], tut[104];
  7.  
  8. bool bpm(int u){
  9.     for (int v = 0; v < n; v++){
  10.         if (bpGraph[u][v] && !seen[v]){
  11.             seen[v] = true;
  12.             if (matchR[v] < 0 || bpm(matchR[v])){
  13.                 matchR[v] = u;
  14.                 return true;
  15.             }
  16.         }
  17.     }
  18.     return false;
  19. }
  20.  
  21. int maxBPM(){
  22.     memset(matchR, -1, sizeof(matchR));
  23.     int result = 0;
  24.     for (int u = 0; u < n; u++){
  25.         memset(seen, 0, sizeof(seen));
  26.         if (bpm(u))
  27.             result++;
  28.     }
  29.     return result;
  30. }
  31.  
  32. void geni(int m){
  33.     memset(bpGraph, 0, sizeof bpGraph);
  34.     for(int i=0;i<n;i++){
  35.         for(int j=0;j<n;j++){
  36.             int a = abs(stu[i].fi - tut[j].fi) + abs(stu[i].se - tut[j].se);
  37.             if(a<=m) bpGraph[i][j] = 1;
  38.         }
  39.     }
  40. }
  41.  
  42. // Second one for graph
  43. bool seen[1004];
  44. int matchR[1004];
  45. int n, m;
  46. vector <int> bpGraph[1004];
  47.  
  48. bool bpm(int u){
  49.     for (auto v: bpGraph[u]){
  50.         if (!seen[v]){
  51.             seen[v] = true;
  52.             if (matchR[v] == -1 || bpm(matchR[v])){
  53.                 matchR[v] = u;
  54.                 matchR[u] = v;
  55.                 return true;
  56.             }
  57.         }
  58.     }
  59.     return false;
  60. }
  61.  
  62. int maxBPM(){
  63.     memset(matchR, -1, sizeof(matchR));
  64.     int result = 0;
  65.     for (int u = 1; u <= n; u++){
  66.         memset(seen, false, sizeof(seen));
  67.         if (~matchR[u] || !bpm(u))
  68.             result++;
  69.     }
  70.     return result;
  71. }
  72.  
  73. void geni(){
  74.     si(n); si(m);
  75.     for(int i=1;i<=n;i++) bpGraph[i].clear();
  76.  
  77.     for(int i=0;i<m;i++){
  78.         int a, b;
  79.         si(a); si(b);
  80.         bpGraph[a].pb(b);
  81.         bpGraph[b].pb(a);
  82.     }
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement