Pagini recente » Cod sursa (job #481545) | Profil PlayHP | Cod sursa (job #1138016) | Cod sursa (job #2787069) | Cod sursa (job #3283464)
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
#define NMAX 10005
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n , m , e , sol;
vector<int> g[NMAX];
bool viz[NMAX];
int l[NMAX] , r[NMAX];
bool connect(int node)
{
if(viz[node])
return false;
viz[node] = true;
for(auto i : g[node])
{
if(!r[i])
{
l[node] = i;
r[i] = node;
return true;
}
}
for(auto i : g[node])
{
if(connect(r[i]))
{
l[node] = i;
r[i] = node;
return true;
}
}
return false;
}
int main()
{
fin >> n >> m >> e;
for(int i = 1 ; i <= e ; i ++)
{
int x, y;
fin >> x >> y;
g[x].push_back(y);
}
bool solved;
do
{
solved = 0;
memset(viz , 0 , sizeof(viz));
for(int i = 1 ; i <= n ; i ++)
{
if(!l[i])
solved = solved | connect(i);
}
}
while(solved);
for(int i = 1 ; i <= n ; i ++)
if(l[i])
sol ++;
fout << sol << '\n';
for(int i = 1 ; i <= n ; i ++)
{
if(l[i])
fout << i << ' ' << l [i] << '\n';
}
return 0;
}