Pagini recente » Cod sursa (job #291509) | Cod sursa (job #2665618) | Cod sursa (job #637873) | Cod sursa (job #3197461) | Cod sursa (job #1363687)
#include <bits/stdc++.h>
using namespace std;
const int Nmax = 10000 + 1;
vector<int> G[Nmax];
bool use[Nmax];
int st[Nmax], dr[Nmax];
int N, M, E;
int pairUp(int nod)
{
if ( use[nod] )
return 0;
use[nod] = 1;
for (int x: G[nod])
if ( !dr[x] || pairUp(dr[x]) )
{
st[nod] = x;
dr[x] = nod;
return 1;
}
return 0;
}
int main()
{
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
ios_base::sync_with_stdio(false);
in >> N >> M >> E;
for ( int i = 1; i <= E; ++i )
{
int a, b;
in >> a >> b;
G[a].push_back(b);
}
int good = 1;
while ( good )
{
good = 0;
fill(use + 1, use + N + 1, 0);
for ( int i = 1; i <= N; ++i )
if ( st[i] == 0 )
good |= pairUp(i);
}
int match = 0;
for ( int i = 1; i <= N; ++i )
match += (st[i] > 0);
out << match << "\n";
for ( int i = 1; i <= N; ++i )
if ( st[i] )
out << i << " " << st[i] << "\n";
return 0;
}