Pagini recente » Profil beer_team | Cod sursa (job #3250675) | Cod sursa (job #3145992) | Cod sursa (job #3236883) | Cod sursa (job #2642457)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
int n,m,q,i,ok,nr,ap[100005],st[100005],dr[100005];
vector <int> v[100005];
bool pot(int x)
{
if(ap[x]) return 0;
int y=0;
ap[x]=1;
for(int ii=1; ii<=v[x][0]; ii++)
{
y=v[x][ii];
if(st[y]==0)
{
dr[x]=y;
st[y]=x;
return 1;
}
}
for(int ii=1; ii<=v[x][0]; ii++)
{
y=v[x][ii];
if(pot(st[y]))
{
dr[x]=y;
st[y]=x;
return 1;
}
}
return 0;
}
int main()
{
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
f>>n>>m>>q;
for(i=1; i<=n; i++) v[i].push_back(0);
for(i=1; i<=q; i++)
{
int x,y;
f>>x>>y;
v[x][0]++;
v[x].push_back(y);
}
ok=1;
while(ok)
{
ok=0;
for(i=1; i<=n; i++) ap[i]=0;
for(i=1; i<=n; i++)
if(dr[i]==0&&pot(i)==1)
{
ok=1;
nr++;
}
}
g<<nr<<'\n';
for(i=1; i<=n; i++)
{
if(dr[i]) g<<i<<" "<<dr[i]<<'\n';
}
return 0;
}