Pagini recente » training_1 | Cod sursa (job #1567700) | Cod sursa (job #2000178) | Niciomare | Cod sursa (job #2018924)
#include <bits/stdc++.h>
#define MAX 10001
using namespace std;
FILE *f1 = fopen("cuplaj.in", "r");
FILE *f2 = fopen("cuplaj.out", "w");
int n, m, e, i, j, cupl = 0, sw, a, b, st[MAX], dr[MAX], v[MAX];
vector<int> G[MAX];
int cuplaj(int node)
{
int i;
if (v[node] == 1)
return 0;
v[node] = 1;
for (i = 0; i < G[node].size(); i++)
if (dr[G[node][i]] == 0)
{
dr[G[node][i]] = node;
st[node] = G[node][i];
return 1;
}
for (i = 0; i < G[node].size(); i++)
if (cuplaj(dr[G[node][i]]) == 1)
{
dr[G[node][i]] = node;
st[node] = G[node][i];
return 1;
}
return 0;
}
int main()
{
fscanf(f1, "%d%d%d", &n, &m, &e);
for (i = 1; i <= e; i++)
{
fscanf(f1, "%d%d", &a, &b);
G[a].push_back(b);
}
sw = 1;
while(sw == 1)
{
sw = 0;
memset(v, 0, sizeof(v));
for (i = 1; i <= n; i++)
if (st[i] == 0 && cuplaj(i) == 1)
{
sw = 1;
cupl++;
}
}
fprintf(f2, "%d\n", cupl);
for (i = 1; i <= n; i++)
if (st[i] != 0)
fprintf(f2, "%d %d\n", i, st[i]);
fclose(f1);
fclose(f2);
return 0;
}