Pagini recente » Cod sursa (job #1205854) | Cod sursa (job #704598) | Cod sursa (job #1892219) | Cod sursa (job #2558643) | Cod sursa (job #1321182)
#include<fstream>
#include<vector>
#define MAXN 10001
using namespace std;
typedef int var;
ifstream fin("java.in");
ofstream fout("java.out");
var L[MAXN], R[MAXN];
vector<var> CON[MAXN];
bool VIZ[MAXN];
bool E[MAXN][MAXN];
var n, m;
bool match(var v) {
if(VIZ[v]) return false;
VIZ[v] = 1;
for(vector<var>::iterator it = CON[v].begin(); it!=CON[v].end(); ++it) {
var w = *it;
if(L[w] == 0) {
R[v] = w;
L[w] = v;
return true;
}
}
for(vector<var>::iterator it = CON[v].begin(); it!=CON[v].end(); ++it) {
var w = *it;
if(match(L[w])) {
R[v] = w;
L[w] = v;
return true;
}
}
return false;
}
void solve() {
bool ok = 1;
while(ok) {
ok = 0;
fill(VIZ+1, VIZ+n+1, 0);
for(var i=1; i<=n; i++) {
if(R[i] == 0) {
ok |= match(i);
}
}
}
}
int main() {
var T, a, b, e, count;
fin>>T;
while(T--) {
fin>>n>>m>>e;
count = 0;
while(e--) {
fin>>a>>b;
if(E[a][b] == 0)
CON[a].push_back(b);
E[a][b] = 1;
}
solve();
for(var i=1; i<=n; i++) {
count += (R[i]!=0);
//fout<<R[i]<<" ";
}
fout<<count<<'\n';
fill(L+1, L+m+1, 0);
fill(R+1, R+n+1, 0);
}
return 0;
}