Cod sursa(job #1606924)

Utilizator RadduFMI Dinu Radu Raddu Data 20 februarie 2016 17:59:29
Problema Cuplaj maxim in graf bipartit Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream f("java.in");
ofstream g("java.out");
vector <int> v[20005];
int use[20005],l[20005],r[200005];
int DFS(int x)
{ int i;
  if (use[x]) return 0;
  use[x]=1;

  for(i=0;i<v[x].size();i++)
   if (!r[v[x][i]])
   { l[x]=v[x][i];
     r[v[x][i]]=x;
     return 1;
   }

  for(i=0;i<v[x].size();i++)
   if (DFS(r[v[x][i]]))
   { l[x]=v[x][i];
     r[v[x][i]]=x;
     return 1;
   }

  return 0;
}
int main()
{ int sol,i,ok,x,y,t,n,m,e;
   f>>t;

   for(;t;t--)
   {
    f>>n>>m>>e;
     for(i=1;i<=e;i++)
     { f>>x>>y;
        v[x].push_back(y+n);
     }

     ok=1; sol=0;
     while(ok)
     { ok=0;
       memset(use,0,sizeof(use));
       for(i=1;i<=n;i++)
       if (!l[i] && DFS(i)) {ok=1; sol++;}
     }

     g<<sol<<"\n";

    memset(l,0,sizeof(l));
    memset(r,0,sizeof(r));
    for(i=1;i<=n;i++)
     v[i].clear();
   }
    return 0;
}