Pagini recente » Cod sursa (job #2115036) | Cod sursa (job #3132436) | Cod sursa (job #1588622) | Cod sursa (job #1110783) | Cod sursa (job #953113)
Cod sursa(job #953113)
#include <iostream>
#include <queue>
#include <fstream>
#include <vector>
#include <string.h>
#define lmax 15000
using namespace std;
int n,m,e;
int v1[lmax],v2[lmax];
vector<int>v[lmax];
bool parcurs[lmax];
bool cuplaj(int a)
{
if(parcurs[a])
{
return false;
}
parcurs[a]=true;
for(int i=0;i<v[a].size();i++)
{
if(!v2[v[a][i]])
{
v2[v[a][i]]=a;
v1[a]=v[a][i];
return true;
}
}
for(int i=0;i<v[a].size();i++)
{
if(cuplaj(v2[v[a][i]]))
{
v2[v[a][i]]=a;
v1[a]=v[a][i];
return true;
}
}
return false;
}
int main()
{
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
f>>n>>m>>e;
int a,b;
while(e--)
{
f>>a>>b;
v[a].push_back(b);
}
while(a!=0)
{
a=0;
for(int i=1;i<=n;i++)
{
if(!v1[i] && cuplaj(i))a=1;
}
memset(parcurs,0,sizeof(parcurs));
}
for(int i=1;i<=n;i++)
{
if(v1[i])a++;
}
g<<a<<"\n";
for(int i=1;i<=n;i++)
{
if(v1[i])
{
g<<i<<" "<<v1[i]<<"\n";
}
}
}