Pagini recente » Cod sursa (job #431967) | Cod sursa (job #140305) | Cod sursa (job #2326393) | Cod sursa (job #630847) | Cod sursa (job #1249398)
#include<fstream>
#include<cstring>
#include<vector>
using namespace std;
const int NMAX = 10005;
vector<int> G[NMAX];
bool u[NMAX];
int l[NMAX],r[NMAX];
int f1[NMAX],f2[NMAX];
bool pairUp(int n){
vector<int>::iterator it;
if(u[n]) return 0;
u[n]=1;
for(it=G[n].begin();it!=G[n].end();++it)
if(!r[*it])
{
l[n]=(*it);
r[*it]=n;
return 1;
}
for(it=G[n].begin();it!=G[n].end();++it)
if(pairUp(r[*it]))
{
l[n]=(*it);
r[*it]=n;
return 1;
}
return 0;
}
int main(){
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int N,M,Much,i,x,y;
bool ok;
f >> N >> M >> Much;
for(i=1;i<=Much;++i)
{
f >> x >> y;
G[x].push_back(y);
}
ok = 1;
while(ok)
{
ok = 0;
memset(u,0,sizeof(u));
for(i=1;i<=N;++i)
if(!l[i]) ok |= pairUp(i);
}
int Card = 0;
for(i=1;i<=N;++i) Card += (l[i] > 0);
g << Card << '\n';
for(i=1;i<=N;++i)
if(l[i] > 0) g << i << ' ' << l[i] << '\n';
return 0;
}