Pagini recente » Cod sursa (job #2952962) | Cod sursa (job #906693) | Cod sursa (job #1612308) | Cod sursa (job #2226553) | Cod sursa (job #2924722)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
vector <int> G[50005];
int l[50005], r[50005], u[50005];
int pairup(int n)
{
if(u[n])
{
return 0;
}
u[n] = 1;
for(vector <int>::iterator i = (G[n]).begin(); i != (G[n]).end(); ++ i)
{
if(!r[*i])
{
l[n] = *i;
r[*i] = n;
return 1;
}
}
for(vector <int>::iterator i = (G[n]).begin(); i != (G[n]).end(); ++ i)
{
if(pairup(r[*i]))
{
l[n] = *i;
r[*i] = n;
return 1;
}
}
return 0;
}
int main()
{
int n, m, k;
fin>>n>>m>>k;
while(k)
{
int x, y;
fin>>x>>y;
G[x].push_back(y);
k--;
}
int change = 1;
while(change == 1)
{
change = 0;
//memset(u, 0, sizeof(u));
for(int i = 1; i <= n; i++)
{
u[i]=0;
}
for(int i = 1; i <= n; i++)
{
if(!l[i])
{
change |= pairup(i);
}
}
}
int cuplaj = 0;
for(int i = 1; i <= n; i++)
{
if(l[i] > 0)
{
cuplaj++;
}
}
fout<<cuplaj;
fout<<'\n';
for(int i = 1; i <= n; i++)
{
if(l[i] > 0)
{
fout<<i<<" "<<l[i]<<'\n';
}
}
return 0;
}