Pagini recente » Cod sursa (job #341852) | Cod sursa (job #1119951) | Cod sursa (job #2483370) | Cod sursa (job #3208144) | Cod sursa (job #953205)
Cod sursa(job #953205)
#include <fstream>
#include <vector>
#define maxn 10001
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
vector <int> A[maxn];
int l[maxn],r[maxn],u[maxn];
void reset(int *u,int n)
{
fill(u,u+n,0);
}
int pereche(int k)
{
unsigned int i;
if (u[k])
return 0;
u[k] = 1;
for (i=0;i<A[k].size();i++)
if (!r[A[k][i]])
{
l[k] = A[k][i];
r[A[k][i]] = k;
return 1;
}
for (i=0;i<A[k].size();i++)
if (pereche(r[A[k][i]]))
{
l[k] = A[k][i];
r[A[k][i]] = k;
return 1;
}
return 0;
}
int main()
{
int n,m,e,cuplaj,i,a,b;
f >> n >> m >> e;
for (i=0;i<e;i++)
{
f >> a >> b;
A[a].push_back(b);
}
cuplaj = 0;
for (i=1;i<=n;i++)
{
if (!l[i])
if (!pereche(i))
{
reset(u,n);
cuplaj+=pereche(i);
}
else
cuplaj++;
}
g << cuplaj <<"\n";
for (i=1;i<=n;i++)
if (l[i]>0)
g << i << " " << l[i] << "\n";
return 0;
}