Pagini recente » Cod sursa (job #1831497) | Cod sursa (job #2228631) | Cod sursa (job #2227162) | Cod sursa (job #2644487) | Cod sursa (job #474689)
Cod sursa(job #474689)
#include<fstream>
#include<vector>
using namespace std;
#define NMAX 10003
ifstream fi("cuplaj.in");
ofstream fo("cuplaj.out");
int n,m,e,x,y,nc,i;
int l[NMAX],r[NMAX];
vector<int> v[NMAX];
bool used[NMAX];
bool change;
bool pairup(int k) {
unsigned int i;
if(used[k]) return false;
used[k]=true;
for(i=0;i<v[k].size();++i)
if(!r[v[k][i]]) {
l[k]=v[k][i];
r[v[k][i]]=k;
return true;
}
for(i=0;i<v[k].size();++i)
if(pairup(r[v[k][i]])) {
l[k]=v[k][i];
r[v[k][i]]=k;
return true;
}
return false;
}
int main() {
fi>>n>>m>>e;
while(e--) {
fi>>x>>y;
v[x].push_back(y);
}
do {
change=0;
for(i=1;i<=n;i++) used[i]=false;
for(i=1;i<=n;i++)
if(!l[i])
if(pairup(i)) change=true;
} while(change);
for(i=1;i<=n;++i)
if(l[i]) ++nc;
fo<<nc<<"\n";
for(i=1;i<=n;++i)
if(l[i]) fo<<i<<" "<<l[i]<<"\n";
return 0;
}