Pagini recente » Cod sursa (job #2118682) | Cod sursa (job #2447827) | Cod sursa (job #1968114) | Cod sursa (job #265234) | Cod sursa (job #2415687)
#include <bits/stdc++.h>
#define NMAX 10005
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n,m,e;
vector<int> adj[NMAX];
int st[NMAX],dr[NMAX];
int vis[NMAX];
bool pairup(int x,int step)
{
if(vis[x]==step) return 0;
vis[x]=step;
for(auto y:adj[x])
if(dr[y]==0)
{
dr[y]=x;
st[x]=y;
return 1;
}
for(auto y:adj[x])
if(pairup(dr[y],step))
{
dr[y]=x;
st[x]=y;
return 1;
}
return 0;
}
int main()
{
fin>>n>>m>>e;
for(int i=0;i<e;i++)
{
int l,r;
fin>>l>>r;
adj[l].push_back(r);
}
bool ok;
int step=1;
do
{
ok=0;
for(int i=1;i<=n;i++)
if(st[i]==0)
ok|=pairup(i,step);
step++;
} while(ok);
vector<pair<int,int> > match;
for(int i=1;i<=n;i++)
if(st[i])
match.push_back({i,st[i]});
fout<<match.size()<<'\n';
for(auto x:match)
fout<<x.first<<' '<<x.second<<'\n';
return 0;
}