Pagini recente » Cod sursa (job #3292064) | Cod sursa (job #235870) | Cod sursa (job #3294051) | Monitorul de evaluare | Cod sursa (job #3289719)
#include <fstream>
#include <vector>
#define mp make_pair
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
const int nmax = 10005;
int n, m, e, vec[nmax], vec2[nmax], fr[nmax];
vector<int> v[10005];
vector< pair<int, int> > ans;
bool cuplaj(int nod)
{
if(fr[nod]) return 0;
int oki = 0; fr[nod] = 1;
for(auto x : v[nod])
if(!vec2[x])
{
vec2[x] = nod;
vec[nod] = x;
oki = 1; break;
}
if(!oki)
for(auto x : v[nod])
if(vec2[x] && cuplaj(vec2[x]))
{
vec2[x] = nod;
vec[nod] = x;
oki = 1; break;
}
return oki;
}
void cuplaj_max()
{
int oki = 1;
while(oki)
{
for(int i = 1; i <= n; i ++) fr[i] = 0;
oki = 0;
for(int i = 1; i <= n; i ++)
if(!vec[i]) oki += cuplaj(i);
}
}
int main()
{
f >> n >> m >> e;
for(int i = 1; i <= e; i ++)
{
int x, y; f >> x >> y;
v[x].push_back(y);
}
cuplaj_max();
for(int i = 1; i <= n; i ++)
if(vec[i])
ans.push_back(mp(i, vec[i]));
g << ans.size() << '\n';
for(auto x : ans)
g << x.first << " " << x.second << '\n';
return 0;
}