Pagini recente » Cod sursa (job #1875619) | Cod sursa (job #953128) | Cod sursa (job #3276818) | Cod sursa (job #1122685) | Cod sursa (job #1817794)
#include <iostream>
#include <cstring>
#include <iomanip>
#include <climits>
#include <fstream>
#include <vector>
#include <algorithm>
#define NMAX 10005
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
vector<int> v[NMAX];
int st[NMAX], dr[NMAX];
bool viz[NMAX];
bool cupleaza(int x) {
if(viz[x]) return 0;
viz[x]=1;
for(auto it:v[x]) {
if(st[it]==0) {
st[it]=x;
dr[x]=it;
return 1;
}
}
for(auto it:v[x]) {
if(cupleaza(st[it])) {
st[it]=x;
dr[x]=it;
return 1;
}
}
return 0;
}
int main(){
int n,m,e,i,x,y,total=0;
fin>>n>>m>>e;
for(i=1;i<=e;++i) {
fin>>x>>y;
v[x].push_back(y);
}
int ok=1;
while(ok) {
ok=0;
memset(viz,0,sizeof(viz));
for(i=1;i<=n;++i)
if(dr[i]==0)
ok|=cupleaza(i);
}
for(i=1;i<=n;++i) if(dr[i]) ++total;
fout<<total<<'\n';
for(i=1;i<=n;++i) if(dr[i]) fout<<i<<' '<<dr[i]<<'\n';
return 0;
}