Pagini recente » Cod sursa (job #1376717) | Cod sursa (job #1786839) | Cod sursa (job #2395683) | Cod sursa (job #882586) | Cod sursa (job #2956407)
#include <cstring>
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
ifstream f("cuplaj.in");
ofstream o("cuplaj.out");
long long int n1, n2, m;
long long int raspuns[10000];
bool bpm(bool bpGraph[1000][1000], long long int u,
bool seen[], long long int matchR[]) {
for (long long int v = 0; v < n2; v++) {
if (bpGraph[u][v] && !seen[v]) {
seen[v] = true;
if (matchR[v] < 0 || bpm(bpGraph, matchR[v],
seen, matchR)) {
matchR[v] = u;
raspuns[u+1]=v+1;
return true;
}
}
}
return false;
}
long long int maxBPM(bool bpGraph[1000][1000]) {
long long int matchR[n2];
memset(matchR, -1, sizeof(matchR));
long long int result = 0;
for (long long int u = 0; u < n1; u++) {
// Mark all jobs as not seen
// for next applicant.
bool seen[n2];
memset(seen, 0, sizeof(seen));
// Find if the applicant 'u' can get a job
if (bpm(bpGraph, u, seen, matchR))
result++;
}
return result;
}
int main() {
f >> n1 >> n2 >> m;
bool bpGraph[1000][1000];
memset(bpGraph, false, sizeof(bpGraph));
for (long long int i = 1; i <= m; i++) {
long long int nod1, nod2;
f >> nod1 >> nod2;
bpGraph[nod1 - 1][nod2 - 1] = true;
}
o << maxBPM(bpGraph)<<"\n";
for(long long int i=1;i<10000;i++)
if(raspuns[i])
o<<i<<" "<<raspuns[i]<<"\n";
return 0;
}