Pagini recente » Cod sursa (job #1942237) | Cod sursa (job #1954150) | Cod sursa (job #2665189) | Cod sursa (job #2356206) | Cod sursa (job #2818185)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in ("cuplaj.in");
ofstream out ("cuplaj.out");
const int MAXN = 10001;
vector <int> G[MAXN];
int to[MAXN], from[MAXN], visited[MAXN];
int N, M, nr, edges;
int kuhn(int e)
{
if (visited[e])
return 0;
visited[e] = 1;
for(auto i : G[e])
if (!from[i] || kuhn(from[i]))
{
from[i] = e;
to[e] = i;
return 1;
}
return 0;
}
int main()
{
in>>N>>M>>edges;
for( int i =1 ; i<=edges; i++ )
{
int x, y;
in>>x>>y;
G[x].push_back(y);
}
int ok = 1;
while (ok)
{
ok = 0;
memset(visited, 0, sizeof(visited));
for(int i = 1; i<=N; i++)
if (!to[i] && kuhn(i))
{
ok = 1;
}
}
for(int i = 1; i<=N; i++)
if(to[i] != 0)
nr++;
out<< nr <<'\n';
for(int i = 1; i<=N; i++)
if (to[i] != 0)
out<<i<<" "<<to[i]<<"\n";
return 0;
}