Pagini recente » Rating Egidiu Farcas (EgidiuF) | Statistici Nume Complet (carolinajambala) | Cod sursa (job #333556) | Istoria paginii runda/lsp_x | Cod sursa (job #1550183)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
#define MAX 20003
int n, na, m;
vector <int> viz(MAX), e(MAX), c(MAX);
int v[MAX][MAX];
void clearViz()
{
for(int i = 1; i < n; i++) viz[i] = 0;
}
void init()
{
fin >> na >> n >> m;
n += na;
for(int i = 1; i <= n; i++)
{
}
for(int i = 1; i <= m; i++)
{
int x, y;
fin >> x >> y;
y += na;
e[x]++;
e[y]++;
v[x][e[x]] = y;
v[y][e[y]] = x;
}
}
int dfs(int a)
{
viz[a] = 1;
for(int i = 1; i <= e[a]; i++)
{
int y = v[a][i];
if(viz[y] || c[i] == y) continue;
viz[y] = 1;
if(c[y] == 0)
{
c[a] = y;
c[y] = a;
viz[y] = 1;
return 1;
}
else
{
if(dfs(c[y]))
{
c[a] = y;
c[y] = a;
return 1;
}
else continue;
}
}
return 0;
}
int main()
{
init();
int ok = 1, nrc = 0;
while(ok == 1)
{
ok = 0;
clearViz();
for(int i = 1; i <= na; i++)
{
if(!viz[i] && c[i] == 0)
if(dfs(i))
{
ok = 1;
nrc++;
}
}
}
fout << nrc << endl;
for(int i = 1; i <= na; i++)
{
if(c[i] != 0)
fout << i << " " << c[i] - na << endl;
}
}