Pagini recente » Cod sursa (job #2879851) | Cod sursa (job #3288636) | Cod sursa (job #2532876) | Cod sursa (job #3258010) | Cod sursa (job #2870832)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
vector <int> st[10005],dr[10005];
int n,m,e,i,x,y;
vector <pair <int,int>> sol;
int stanga[10005],dreapta[10005],sel[10005];
bool cuplaj(int x)
{
sel[x]=1;
for (int i=0;i<st[x].size();i++)
{
int nod =st[x][i];
if (dreapta[nod]==0)
{
stanga[x]=nod;
dreapta[nod]=x;
return 1;
}
}
for (int i=0;i<st[x].size();i++)
{
int nod = st[x][i];
if (sel[dreapta[nod]]==0&&cuplaj(dreapta[nod])==1)
{
stanga[x]=nod;
dreapta[nod]=x;
return 1;
}
}
return 0;
}
int main()
{
f>>n>>m>>e;
for (i=1;i<=e;i++)
{
f>>x>>y;
st[x].push_back(y);
}
int ok=1;
while (ok==1)
{
ok=0;
for (i=1;i<=n;i++)
{
sel[i]=0;
}
for (i=1;i<=n;i++)
{
if (sel[i]==0&&stanga[i]==0)
{
ok=ok|cuplaj(i);
}
}
}
for (i=1;i<=n;i++)
{
if (stanga[i]!=0)
{
sol.push_back({i,stanga[i]});
}
}
g<<sol.size()<<'\n';
for (int i=0;i<sol.size();i++)
{
g<<sol[i].first<<" "<<sol[i].second<<'\n';
}
return 0;
}