Pagini recente » Cod sursa (job #791296) | Cod sursa (job #255610) | Cod sursa (job #1698222) | Cod sursa (job #79807) | Cod sursa (job #2938511)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
const int N=20010;
int n,m,e,nr,cup[N];
vector<int> v[N];
bitset<N> viz;
vector<pair<int,int>> sol;
bool cupleaza(int);
int main()
{
f>>n>>m>>e;
for(; e; e--)
{
int x,y;
f>>x>>y;
y+=n;
v[x].push_back(y);
v[y].push_back(x);
}
bool cuplaj=true;
while(cuplaj)
{
viz.reset();
cuplaj=false;
for(int i=1; i<=n; i++)
if(!cup[i]&&!viz[i])
if(cupleaza(i))
cuplaj=true;
}
for(int i=1;i<=n;i++)
if(cup[i])
sol.push_back(make_pair(i,cup[i]-n));
g<<sol.size()<<'\n';
for(auto it:sol)
g<<it.first<<' '<<it.second<<'\n';
return 0;
}
bool cupleaza(int nod)
{
if(viz[nod])
return false;
viz[nod]=1;
for(auto vec:v[nod])
if(!cup[vec])
{
cup[nod]=vec;
cup[vec]=nod;
return true;
}
for(auto vec:v[nod])
if(cupleaza(cup[vec]))
{
cup[nod]=vec;
cup[vec]=nod;
return true;
}
return false;
}