Pagini recente » Cod sursa (job #2890185) | Cod sursa (job #1420193) | Cod sursa (job #2673026) | Cod sursa (job #2613755) | Cod sursa (job #863042)
Cod sursa(job #863042)
#include <fstream>
#include <vector>
using namespace std;
#define MAXN 10005
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n, m, edges;
vector<int> G[MAXN];
vector<bool> s;
int L[MAXN], R[MAXN];
void Read();
int Solve();
int cupleaza( int x );
void Write();
int main()
{
Read();
Write();
fin.close();
fout.close();
return 0;
}
void Read()
{
int x, y;
fin >> n >> m >> edges;
s.resize(n + 1);
for( ; edges-- ;)
{
fin >> x >> y;
G[x].push_back( y );
}
fin.close();
}
int Solve()
{
bool ok = true;
int result = 0;
while( ok )
{
s.assign( n + 1, 0 );
ok = false;
for( int i = 1; i <= n; ++i )
if( L[i] == 0 )
if( cupleaza( i ) )
result++, ok = 1;
}
return result;
}
int cupleaza( int x )
{
if( s[x] )
return 0;
s[x] = true;
for( int i = 0; i < G[x].size(); ++i )
if( R[G[x][i]] == 0 || cupleaza( R[G[x][i]] ) )
{
L[x] = G[x][i];
R[G[x][i]] = x;
return 1;
}
return 0;
}
void Write()
{
fout << Solve() << '\n';
for( int i = 1; i <= n; ++i )
if( L[i] )
fout << i << ' ' << L[i] << '\n';
}