Pagini recente » Cod sursa (job #2117368) | Cod sursa (job #451534) | Cod sursa (job #2385788) | Cod sursa (job #622539) | Cod sursa (job #630647)
Cod sursa(job #630647)
#include<fstream>
#include<vector>
using namespace std;
const int N = 10001;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
int n,m,l[N],r[N],e;
vector<int> v[N];
bool u[N];
bool pairup(int x) {
vector<int>::iterator it;
if(u[x])
return 0;
u[x]=true;
for(it=v[x].begin();it!=v[x].end();++it)
if(r[*it]==0 || pairup(r[*it])) {
l[x]=*it; r[*it]=x;
return 1;
}
return 0;
}
int cuplaj() {
int i,c=0,ok=1;
while(ok) {
for(i=1;i<=n;++i)
u[i]=false;
ok=0;
for(i=1;i<=n;++i)
if(l[i]==0)
if(pairup(i)) {
++c;
ok=1;
}
}
return c;
}
int main() {
int i,a,b;
in >> n >> m >> e;
for(i=1;i<=e;++i) {
in >> a >> b;
v[a].push_back(b);
}
out << cuplaj() << "\n";
for(i=1;i<=n;++i)
if(l[i])
out << i << " " << l[i] << "\n";
return 0;
}