Pagini recente » Cod sursa (job #1288031) | Cod sursa (job #2260978) | Cod sursa (job #967200) | Cod sursa (job #2667339) | Cod sursa (job #263137)
Cod sursa(job #263137)
#include <algorithm>
#include <stdio.h>
#include <vector>
#include <string.h>
#define pb push_back
#define MAX 10010
using namespace std;
int nrSour, nrDest, nrEdges, sol;
int vctDr[MAX], vctSt[MAX], sel[MAX];
vector <short> listDrum[MAX];
inline int cupleaza(int nod)
{
if (sel[nod])
return 0;
sel[nod] = 1;
for (int i = 0; i < listDrum[nod].size(); i++)
{
int repr = listDrum[nod][i];
if (!vctSt[repr] || cupleaza(vctSt[repr]]))
{
vctSt[repr] = nod;
vctDr[nod] = repr;
return 1;
}
}
return 0;
}
int main()
{
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
scanf("%d %d %d", &nrSour, &nrDest, &nrEdges);
for (; nrEdges; nrEdges--)
{
int t, f;
scanf("%d %d", &t, &f);
listDrum[t].pb(f);
}
for (int i = 1; i <= nrSour; i++)
{
if (vctDr[i])
continue;
memset(sel, 0, sizeof(sel));
sol += cupleaza(i);
}
printf("%d\n", sol);
for (int i = 1; i <= nrSour; i++)
if (vctDr[i])
printf("%d %d\n", i, vctDr[i]);
fclose(stdin);
fclose(stdout);
return 0;
}