Pagini recente » Cod sursa (job #865543) | Cod sursa (job #1017107) | Cod sursa (job #2959387) | Cod sursa (job #561378) | Cod sursa (job #1786009)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n,m,k,dr[10005],st[10005];
vector <int> L[10005];
bool viz[10005];
void Citire()
{
int i,x,y;
fin>>n>>m>>k;
for(i=1;i<=k;i++)
{
fin>>x>>y;
L[x].push_back(y);
}
fin.close();
}
inline bool Cupleaza(int nod)
{
int i,nnod;
if(viz[nod]) return false;
viz[nod]=true;
for(i=0;i<L[nod].size();i++)
{
nnod=L[nod][i];
if(!dr[nnod])
{
st[nod]=nnod;
dr[nnod]=nod;
return true;
}
}
for(i=0;i<L[nod].size();i++)
{
nnod=L[nod][i];
if(Cupleaza(dr[nnod]))
{
st[nod]=nnod;
dr[nnod]=nod;
return true;
}
}
return false;
}
void Rezolvare()
{
int i,j,gata,ans=0;
gata=0;
while(!gata)
{
gata=1;
for(i=1;i<=n;i++) viz[i]=0;
for(i=1;i<=n;i++) if(!st[i]&&Cupleaza(i))
{
ans++;
gata=0;
}
}
fout<<ans<<"\n";
for(i=1;i<=n;i++) if(st[i]) fout<<i<<" "<<st[i]<<"\n";
fout.close();
}
int main()
{
Citire();
Rezolvare();
return 0;
}