Pagini recente » Cod sursa (job #269422) | Cod sursa (job #2929584) | Cod sursa (job #1457213) | Cod sursa (job #693002) | Cod sursa (job #1914598)
#include <cstdio>
#include <vector>
using namespace std;
vector<int> vecini[10005];
int n, m, q;
int viz[10005];
int st[10005];
int dr[10005];
void citire()
{
scanf("%d %d %d", &n, &m, &q);
int tmp1, tmp2;
for(int i = 0; i < q; i++)
{
scanf("%d %d", &tmp1, &tmp2);
vecini[tmp1].push_back(tmp2);
}
}
int solvex(int x)
{
if(viz[x] == 1)
{
return 0;
}
viz[x] = 1;
int l = vecini[x].size();
for(int i = 0; i < l; i++)
{
if(dr[vecini[x][i]] == 0)
{
dr[vecini[x][i]] = x;
st[x] = vecini[x][i];
return 1;
}
else if(solvex(dr[vecini[x][i]]) == 1)
{
dr[vecini[x][i]] = x;
st[x] = vecini[x][i];
return 1;
}
}
return 0;
}
void curataViz()
{
for(int i = 0; i <= n; i++)
{
viz[i] = 0;
}
}
void solve()
{
bool ok = true;
while(ok == true)
{
ok = false;
curataViz();
for(int i = 1; i <= n; i++)
{
if(st[i] == 0)
{
ok |= solvex(i);
}
}
}
int nr = 0;
for(int i = 1; i <= n; i++)
{
if(st[i] != 0)
{
nr++;
}
}
printf("%d\n", nr);
for(int i = 1; i <= n; i++)
{
if(st[i] != 0)
{
printf("%d %d \n", i, st[i]);
}
}
}
int main()
{
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
citire();
solve();
return 0;
}