Pagini recente » Cod sursa (job #436534) | Istoria paginii runda/vali_tigan | Cod sursa (job #437171) | Cod sursa (job #1716904) | Cod sursa (job #1549366)
// ConsoleApplication5.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include<vector>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
const int N = 20000;
int l[N];
int v[N][N];
int na, nb;
int c[N];
int viz[N];
int dfs(int i)
{
int k, j;
viz[i] = 1;
for (j = 0; j<l[i]; j++)
{
k = v[i][j];
if (viz[k] || c[i] == k)continue;
viz[k] = 1;
if (c[k] == -1)
{
c[k] = i;
c[i] = k;
return 1;
}
else
{
if (dfs(c[k]))
{
c[i] = k;
c[k] = i;
return 1;
}
else continue;
}
}
return 0;
}
void greedy(int i)
{
for (int j = 0; j<l[i]; j++)
if (c[j] == -1)
{
c[i] = j;
c[j] = i;
break;
}
}
int main()
{
int ok = 0, i, j, x, y;
fin >> na >> nb >> j;
while (j--)
{
fin >> x >> y;
x--;
y = y + na - 1;
v[x][l[x]++] = y;
v[y][l[y]++] = x;
}
for (i = 0; i < na + nb; i++)c[i] = -1;
while (!ok)
{
ok = 1;
for (i = 0; i < na + nb; i++)viz[i] = 0;
for (i = 0; i < na; i++)
if (!viz[i] && c[i] == -1)
if (dfs(i))
ok = 0;
}
int q = 0;
for (i = 0; i < na; i++)if (c[i] != -1)q++;
fout << q << '\n';
for (i = 0; i < na; i++)
if (c[i] != -1)
fout << i + 1 << " " << c[i] - na + 1 << '\n';
return 0;
}