Pagini recente » Cod sursa (job #1287788) | Cod sursa (job #1656918) | Cod sursa (job #413870) | Istoria paginii utilizator/obliterator | Cod sursa (job #895938)
Cod sursa(job #895938)
#include <cstdio>
#include <iostream>
#include <vector>
#define GLen 10001
using namespace std;
vector < int > g[GLen];
int L[GLen], R[GLen], use[GLen];
inline int cuplaj(int nod)
{
if(use[nod]) return 0;
use[nod] = 1;
for(int i = 0; i < g[nod].size(); ++ i)
if(R[ g[nod][i] ] == 0)
{
L[nod] = g[nod][i];
R[ g[nod][i] ] = nod;
return 1;
}
for(int i = 0; i < g[nod].size(); ++ i)
if(cuplaj(R[ g[nod][i] ]))
{
L[nod] = g[nod][i];
R[ g[nod][i] ] = nod;
return 1;
}
return 0;
}
int main()
{
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
int N, M, E;
cin >> N >> M >> E;
for(int i = 1; i <= E; ++ i)
{
int x, y;
cin >> x >> y;
g[x].push_back(y);
}
int change = 1;
while(change)
{
change = 0;
for(int i = 1; i <= N; ++ i) use[i] = 0;
for(int i = 1; i <= N; ++ i)
if(!L[i])
change |= cuplaj(i);
}
int sol = 0;
for(int i = 1; i <= N; ++ i)
if(L[i] != 0) ++ sol;
cout << sol << '\n';
for(int i = 1; i <= N; ++ i)
if(L[i])
cout << i << ' ' << L[i] << '\n';
return 0;
}