Pagini recente » Cod sursa (job #1979528) | Cod sursa (job #906197) | Cod sursa (job #3257913) | Cod sursa (job #32249) | Cod sursa (job #1685134)
#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define int64 unsigned long long
#define INF numeric_limits<int64>::max()
#define lsb(x) (-x)&x
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
int n,m;
vector< vector<int> > adj;
vector<int> gr1,gr2;
vector<bool> v;
int pairUp(int x)
{
if(v[x]==true)
return 0;
v[x]=true;
for(auto it: adj[x])
if(gr2[it]==0)
{
gr2[it]=x;
gr1[x]=it;
return 1;
}
for(auto it: adj[x])
if(pairUp(gr2[it])==1)
{
gr2[it]=x;
gr1[x]=it;
return 1;
}
return 0;
}
int main()
{
int t;
in>>n>>m>>t;
adj=vector< vector<int> > (n+1);
gr1=vector<int> (n+1);
gr2=vector<int> (m+1);
v=vector<bool> (n+1);
for(;t;t--)
{
int x,y;
in>>x>>y;
adj[x].pb(y);
}
for(int ok=1;ok!=0;)
{
ok=0;
for(int i=1;i<=n;i++)
v[i]=false;
for(int i=1;i<=n;i++)
if(gr1[i]==0)
ok+=pairUp(i);
}
int cnt=0;
for(int i=1;i<=n;i++)
if(gr1[i]!=0)
cnt++;
out<<cnt<<'\n';
for(int i=1;i<=n;i++)
if(gr1[i]!=0)
out<<i<<' '<<gr1[i]<<'\n';
return 0;
}