Pagini recente » Cod sursa (job #1161555) | Clasament urmasii_lui_taraban | Cod sursa (job #373827) | Cod sursa (job #2492522) | Cod sursa (job #984423)
Cod sursa(job #984423)
#include<fstream>
#include<vector>
#include <algorithm>
using namespace std;
int n,m,e,x,y,v[22000],l[11000],r[11000],sol;
vector<int> a[22000];
int cuplaj(int x)
{
if(v[x])
return 0;
v[x]=1;
int y=a[x].size(),i;
for (i=0;i<y;i++)
if(r[a[x][i]]==0)// se conecteaza cu cineva cu care nu a fost cuplat
{
l[x]=a[x][i];
r[a[x][i]]=x;
return 1;
}
for (i=0;i<y;i++)
if(cuplaj(r[a[x][i]])==1) // incerc sa recuplez
{
l[x]=a[x][i];
r[a[x][i]]=x;
return 1;
}
return 0;
}
int main()
{
fstream f,g;
int i,ok=1;
f.open("cuplaj.in",ios::in);
g.open("cuplaj.out",ios::out);
f>>n>>m>>e;
for (i=1;i<=e;i++)
{
f>>x>>y;
a[x].push_back(y);
}
while(ok)
{
ok=0;
for (i=1;i<=n;i++)
v[i]=0;
for (i=1;i<=n;i++)
if(l[i]==0)
if(cuplaj(i)==1)
ok=1;
}
int nr=0;
for(i=1;i<=n;++i)
if(l[i])
sol++;
g<<sol<<"\n";
for (i=1;i<=n;i++)
if(l[i])
g<<i<<" "<<l[i]<<'\n';
}