Pagini recente » Cod sursa (job #2956752) | Cod sursa (job #1777708) | Cod sursa (job #1308617) | Cod sursa (job #2840261) | Cod sursa (job #1797951)
# include <fstream>
# include <vector>
# include <cstring>
# define DIM 10010
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
vector <int> Lista[DIM];
int Marcat[DIM],r[DIM],l[DIM],n,m,nr,x,y,ok,i;
int cuplaj(int nod){
if(Marcat[nod])
return 0;
Marcat[nod]=1;
for(int i=0;i<Lista[nod].size();i++){
int vecin=Lista[nod][i];
if(!r[vecin]){
r[vecin]=nod;
l[nod]=vecin;
return 1;
}
}
for(int i=0;i<Lista[nod].size();i++){
int vecin=Lista[nod][i];
if(cuplaj(r[vecin])){
l[nod]=vecin;
r[vecin]=nod;
return 1;
}
}
return 0;
}
int main () {
fin>>n>>m>>nr;
for(i=1;i<=nr;i++){
fin>>x>>y;
Lista[x].push_back(y);
}
do{
memset(Marcat,0,sizeof(Marcat));
ok=0;
for(i=1;i<=n;i++){
if(!l[i])
ok=max(ok,cuplaj(i));
}
}while(ok);
nr=0;
for(i=1;i<=n;i++)
if(l[i])
nr++;
fout<<nr<<"\n";
for(i=1;i<=n;i++)
if(l[i])
fout<<i<<" "<<l[i]<<"\n";
return 0;
}