Pagini recente » Cod sursa (job #20431) | Cod sursa (job #1046763) | Cod sursa (job #1027263) | Cod sursa (job #2732685) | Cod sursa (job #807066)
Cod sursa(job #807066)
#include <fstream>
#include <cstring>
using namespace std;
typedef struct celula{
int nod;
celula *next;
}*lista;
lista graf[10001],v;
int n,m,e,l[10001],r[10001],viz[10001];
bool cupleaza(int sursa) {
lista p;
if(viz[sursa]) return(false);
viz[sursa]=1;
for(p=graf[sursa];p; p=p->next)
if(!r[p->nod]){
l[sursa]=p->nod;
r[p->nod]=sursa;
return true;
}
for(p=graf[sursa];p; p=p->next)
if(cupleaza(r[p->nod])) {
l[sursa]=p->nod;
r[p->nod]=sursa;
return(true);
}
return(false);
}
int main(void){
int i,x,y,sol=0;
bool ok=true;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
fin>>n>>m>>e;
for(i=1; i<=e; i++) {
fin>>x>>y;
v=new celula; v->nod=y; v->next=graf[x]; graf[x]=v;
}
while (ok) {
ok=false;
memset(viz,0,sizeof(viz));
for(i=1; i<=n; ++i) if(!l[i]) ok=ok|cupleaza(i);
}
for(i=1; i<=n; ++i) if(l[i]) ++sol;
fout<<sol<<"\n";
for(i=1; i<=n; ++i) if (l[i])fout<<i<<" "<<l[i]<<"\n";
return 0;
}