Pagini recente » Cod sursa (job #143197) | Cod sursa (job #1580898) | Cod sursa (job #613134) | Profil alexandrina_alexandrina | Cod sursa (job #1199330)
#include<fstream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef struct lnod {
int info;
lnod *next;
}*nod;
int l[10005],r[10005],i,j,n,m,e,x,y,rs;
bool u=1,viz[10005];
nod lda[10005];
void add(int x,nod y) {
nod p=new lnod;
p->info=x;
p->next=y;
y=p;
}
bool cuplaj(int x) {
nod p;
if(viz[x]==1) return 0;
viz[x]=1;
for(p=lda[x];p;p=p->next)
if(r[p->info]==0) {
l[x]=p->info;
r[p->info]=x;
return 1;
}
for(p=lda[x];p;p=p->next)
if(cuplaj(r[p->info])==1) {
l[x]=p->info;
r[p->info]=x;
return 1;
}
return 0;
}
int main()
{
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
cin>>n>>m>>e;
while(e--)
{
cin>>x>>y;
add(y,lda[x]);
}
while(u==1)
{
u=0;
memset(viz,0,sizeof(viz));
for(i=1;i<=n;i++)
if(l[i]==0) u=u|cuplaj(i);
}
for(i=1;i<=n;i++) if(l[i]!=0) ++rs;
cout<<rs<<'\n';
for(i=1;i<=n;i++) if(l[i]!=0) cout<<i<<' '<<l[i]<<'\n';
return 0;
}