Pagini recente » Statistici Antonie Valentin (ValiAntonie123) | Cod sursa (job #2060219) | Diferente pentru olimpici intre reviziile 148 si 147 | Istoria paginii runda/simasdasdasd/clasament | Cod sursa (job #1004058)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("java.in");
ofstream g("java.out");
int T,m,n,E,L[10011],R[10011];
bool viz[10011];
vector<int> C[10011];
inline int cuplaj(int nod){
int rez;
if(viz[nod])
return 0;
viz[nod]=true;
//plrima incercare
for(register int i=0;i<C[nod].size();i++){
if(!R[C[nod][i]]){
L[nod]=C[nod][i];
R[C[nod][i]]=nod;
return 1;
}
}
//a doua incercare
for(register int i=0;i<C[nod].size();i++){
rez=cuplaj(R[C[nod][i]]);
if(rez){
L[nod]=C[nod][i];
R[C[nod][i]]=nod;
return 1;
}
}
return 0;
}
int main(void){
register int i,j,x,y,nr,rez;
bool ok;
f>>T;
for(;T>0;T--){
f>>m>>n>>E;
for(;E>0;E--)
f>>x>>y,C[x].push_back(y);
do{ok=false;
rez=0;
for(i=1;i<=n;i++){
if(!L[i]){
rez=cuplaj(i);
}
if(rez)
ok=true;
}
for(i=1;i<=m;i++)
viz[i]=false;
}while(ok);
nr=0;
for(i=1;i<=m;i++)
C[i].clear(),nr+=(L[i]>0?1:0),L[i]=0;
for(i=1;i<=n;i++)
R[i]=0;
g<<nr<<"\n";
}
f.close();
g.close();
return 0;
}