Pagini recente » Cod sursa (job #1830415) | Cod sursa (job #1046398) | Cod sursa (job #2878475) | Cod sursa (job #2746803) | Cod sursa (job #1817789)
#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(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;
}