Pagini recente » Cod sursa (job #646886) | Cod sursa (job #249353) | Cod sursa (job #2613139) | Cod sursa (job #827787) | Cod sursa (job #778232)
Cod sursa(job #778232)
#include <fstream>
#include <vector>
#include <cstring>
#define MAX 10005
using namespace std;
vector<int> v[MAX];
int l[MAX], r[MAX], u[MAX], n, m, k, a, b;
int pairup(int nod)
{
if(u[nod]) return 0;
u[nod] = 1;
for(int i = 0; i < v[nod].size(); i++)
{
if(!r[v[nod][i]])
{
l[nod] = v[nod][i];
r[v[nod][i]] = nod;
return 1;
}
}
for(int i = 0; i < v[nod].size(); i++)
{
if(pairup(r[v[nod][i]]))
{
l[nod] = v[nod][i];
r[v[nod][i]] = nod;
return 1;
}
}
return 0;
}
int main()
{
ifstream in("cuplaj.in"); in>>n>>m>>k;
for(int i = 1; i <= k; i++)
{
in>>a>>b;
v[a].push_back(b);
} in.close();
for(int change = 1; change;)
{
change = 0;
memset(u, 0, sizeof(u));
for(int i = 1; i <= n; i++)
if(!l[i])
change |= pairup(i);
}
int cuplaj = 0;
for(int i = 1; i <= n; i++) if(l[i]) cuplaj++;
ofstream out("cuplaj.out"); out<<cuplaj<<"\n";
for(int i = 1; i <= n; i++)
if(l[i])
out<<i<<" "<<l[i]<<"\n";
out.close();
return 0;
}