Pagini recente » Cod sursa (job #63893) | Cod sursa (job #292597) | Cod sursa (job #22475) | Cod sursa (job #2694831) | Cod sursa (job #2528649)
#include <fstream>
#include <vector>
const int MAXN = 10000;
using namespace std;
ifstream cin( "cuplaj.in" );
ofstream cout( "cuplaj.out" );
vector<int> g[MAXN+1];
int n, m, e;
int l[MAXN+1], r[MAXN+1];
bool viz[MAXN+1];
void reset( bool v[] )
{
for( int i=1;i<=n;i++ )
v[i]=false;
}
bool pairup( int node )
{
if( viz[node] )
return false;
viz[node]=true;
for( vector<int>::iterator it=g[node].begin();it!=g[node].end();it++ )
if( !r[*it] )
{
l[node]=*it;
r[*it]=node;
return true;
}
for( vector<int>::iterator it=g[node].begin();it!=g[node].end();it++ )
if( pairup(r[*it]) )
{
l[node]=*it;
r[*it]=node;
return true;
}
return false;
}
int main()
{
cin>>n>>m>>e;
for( int i=1;i<=e;i++ )
{
int x, y;
cin>>x>>y;
g[x].push_back(y);
}
bool ok;
do
{
ok=false;
reset(viz);
for( int i=1;i<=n;i++ )
if( !l[i] )
ok|=pairup(i);
}
while( ok );
int ans=0;
for( int i=1;i<=n;i++ )
if( l[i]!=0 )
ans++;
cout<<ans<<"\n";
for( int i=1;i<=n;i++ )
if( l[i]!=0 )
cout<<i<<" "<<l[i]<<"\n";
return 0;
}