Pagini recente » Cod sursa (job #2283363) | Cod sursa (job #2683460) | Cod sursa (job #1105879) | Cod sursa (job #1915840) | Cod sursa (job #1550197)
#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, e, c;
vector <vector <int> > v;
void clearViz()
{
for(int i = 1; i < n; i++) viz[i] = 0;
}
void init()
{
fin >> na >> n >> m;
n += na;
viz.resize(n+1);
e.resize(n+1);
c.resize(n+1);
v.resize(n+1);
for(int i = 1; i <= m; i++)
{
int x, y;
fin >> x >> y;
y += na;
e[x]++;
e[y]++;
v[x].resize(e[x]+1);
v[y].resize(e[y]+1);
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;
}
}