Pagini recente » Cod sursa (job #1720914) | Cod sursa (job #424147) | Cod sursa (job #1762540) | Cod sursa (job #1304689) | Cod sursa (job #568048)
Cod sursa(job #568048)
#include<fstream>
#include<bitset>
#include<vector>
#define MAX 10001
using namespace std;
int l[MAX],r[MAX],N,M,E;
bitset<MAX> u;
vector<int> G[MAX];
void read()
{
ifstream f("cuplaj.in");
f>>N>>M>>E;
int i,x,y;
for(i=1;i<=E;++i)
{
f>>x>>y;
G[x].push_back(y);
}
f.close();
}
int pairup(int x)
{
if(u[x])return 0;
u[x] = 1;
for(vector<int>::iterator it = G[x].begin();it!=G[x].end();++it)
if(!r[*it])
{
l[x] = *it;
r[*it] = x;
return 1;
}
for(vector<int>::iterator it = G[x].begin();it!=G[x].end();++it)
if(pairup(r[*it]))
{
l[x] = *it;
r[*it] = x;
return 1;
}
return 0;
}
int main()
{
read();
int change = 1,i;
while(change)
{
change = 0;
u.reset();
for(i=1;i<=N;++i)
if(!l[i])
if(pairup(i))change = 1;
}
int cnt = 0;
for(i=1;i<=N;++i)
if(l[i])++cnt;
ofstream g("cuplaj.out");
g<<cnt<<"\n";
for(i=1;i<=N;++i)
if(l[i])g<<i<<" "<<l[i]<<"\n";
g.close();
return 0;
}