Pagini recente » Cod sursa (job #54824) | Cod sursa (job #2589818) | Cod sursa (job #3291280) | Cod sursa (job #1610296) | Cod sursa (job #2577525)
#include <bits/stdc++.h>
#define NMAX 10010
using namespace std ;
ifstream f ("cuplaj.in") ;
ofstream g ("cuplaj.out") ;
int N , M , E , x , y , ans = 0;
vector <int> G[NMAX];
vector <pair <int,int> > v;
int L[NMAX] , R[NMAX] , marked[NMAX];
bool cupleaza (int nod)
{
marked[nod] = true ;
for (auto i: G[nod])
if (!R[i])
{
R[i] = nod;
L[nod] = i;
return true ;
}
for (auto i : G[nod])
if (!marked[R[i]] && cupleaza(R[i]))
{
L[nod] = i;
R[i] = nod;
return true;
}
return false;
}
int main()
{
f >> N >> M >> E ;
for (int i = 1 ; i <= E ; ++i)
{
f >> x >> y;
G[x].push_back(y) ;
}
bool done = true ;
while (done)
{
done = false;
for (int i = 1 ; i <= N ; ++i) marked[i] = false;
for (int i = 1 ; i <= N ; ++i)
if (!marked[i] && !L[i])
if (cupleaza(i)) done = 1;
}
for (int i = 1 ; i <= N ; ++i) if (L[i])
{
ans ++ ;
v.push_back({i,L[i]}) ;
}
g << ans << '\n';
for (int i = 0 ; i < ans ; ++i)
g << v[i].first << ' ' << v[i].second << '\n' ;
}