Pagini recente » Cod sursa (job #1960150) | Cod sursa (job #2655643) | Cod sursa (job #2143691) | Cod sursa (job #632344) | Cod sursa (job #1550172)
#include <fstream>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int viz[20003], n, na, m, e[20003], v[20003][20003], c[20003];
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 <= 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;
}
}