Pagini recente » Cod sursa (job #1521104) | Cod sursa (job #2629728) | Cod sursa (job #1905117) | Cod sursa (job #957205) | Cod sursa (job #1549318)
#include<bits/stdc++.h>
using namespace std;
typedef struct lnod {
int nod;
lnod *next;
}*nod;
int i,j,n,m,e,x,y,rs,l[10005],r[10005];
bool u=1,viz[10005];
nod lda[10005];
void add(int x,nod &y) {
nod p=new lnod;
p->nod=x;
p->next=y;
y=p;
}
bool cuplaj(int x) {
if(viz[x]) return 0;
viz[x]=1;
for(nod p=lda[x];p;p=p->next)
if(!r[p->nod] || cuplaj(r[p->nod]))
{
l[x]=p->nod;
r[p->nod]=x;
return 1;
}
return 0;
}
int main()
{
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
ios_base::sync_with_stdio(0); cin.tie(0);
for(cin>>n>>m>>e;e;--e) cin>>x>>y,add(y,lda[x]);
while(u)
{
memset(viz,0,sizeof(viz));
for(i=1,u=0;i<=n;++i)
if(!l[i]) u|=cuplaj(i);
}
for(i=1;i<=n;++i) rs+=(l[i]!=0);
cout<<rs<<'\n';
for(i=1;i<=n;++i) if(l[i]) cout<<i<<' '<<l[i]<<'\n';
return 0;
}