Pagini recente » Cod sursa (job #520241) | Cod sursa (job #3226753) | Cod sursa (job #1342104) | Cod sursa (job #167227) | Cod sursa (job #2240924)
#include<cstdio>
#include<cstring>
#include<vector>
#define oo 100005
using namespace std;
int u,v,N,M,E;
vector<int>g[oo];
void scan()
{
freopen( "cuplaj.in", "r", stdin );
freopen( "cuplaj.out", "w", stdout );
scanf("%d %d %d",&N,&M,&E);
for(int i=0;i<E;i++)
{
scanf("%d %d",&u,&v);
g[u].push_back(v);
}
}
bool used[oo];
int L[oo],R[oo];
bool iugo(int node)
{
if(used[node])
return false;
used[node]=true;
for(int i=0;i<g[node].size();i++)
{
int neigh=g[node][i];
if(!R[neigh])
{
R[neigh]=node;
L[node]=neigh;
return true;
}
}
for(int i=0;i<g[node].size();i++)
{
int neigh=g[node][i];
if(iugo(R[neigh]))
{
R[neigh]=node;
L[node]=neigh;
return true;
}
}
return false;
}
int pairing()
{
bool ok=true;
int nrcrt=0;
while(ok)
{
memset(used,0,sizeof used);
ok=false;
for(int i=1;i<=N;i++)
if(!L[i])
if(iugo(i))
{
nrcrt++;
ok=true;
}
}
printf("%d\n",nrcrt);
}
void print()
{
for(int i=1;i<=N;i++)
if(L[i])
printf( "%d %d\n", i, L[i] );
}
int main()
{
scan();
pairing();
print();
}