Pagini recente » Cod sursa (job #1046400) | Cod sursa (job #751039) | Cod sursa (job #572127) | Cod sursa (job #2192401) | Cod sursa (job #1304070)
#include <cstdio>
#include <vector>
#define Nmax 10005
using namespace std;
int n,m,st[Nmax],dr[Nmax];
bool viz[Nmax];
vector <int> L[Nmax];
inline bool Cupleaza(int nod)
{
if(viz[nod]) return false;
viz[nod]=true;
vector <int> ::iterator it;
for(it=L[nod].begin();it!=L[nod].end();++it)
if(!st[*it])
{
dr[nod]=*it; st[*it]=nod;
return true;
}
for(it=L[nod].begin();it!=L[nod].end();++it)
if(Cupleaza(st[*it]))
{
dr[nod]=*it; st[*it]=nod;
return true;
}
return false;
}
int main()
{
int x,y,M,ans=0,gata=0,i;
freopen ("cuplaj.in","r",stdin);
freopen ("cuplaj.out","w",stdout);
scanf("%d%d%d", &n,&m,&M);
while(M--)
{
scanf("%d%d", &x,&y);
L[x].push_back(y);
}
while(!gata)
{
gata=1;
for(i=1;i<=n;++i) viz[i]=false;
for(i=1;i<=n;++i)
if(!dr[i] && Cupleaza(i))
{
gata=0;
//break;
}
}
for(i=1;i<=n;++i) ans+=(dr[i]>0);
printf("%d\n", ans);
for(i=1;i<=n;++i)
if(dr[i]) printf("%d %d\n", i,dr[i]);
return 0;
}