Pagini recente » Clasament Summer Challenge 2009, Runda 1 | Rezultatele filtrării | Monitorul de evaluare | Statisticile problemei Paginatie | Cod sursa (job #306548)
Cod sursa(job #306548)
#include<fstream.h>
struct nod
{short inf;
nod *adr;}*G[10001];
short L[10001],R[10001],F[10001],N,M,u,v,sf,i,c;
void ad(short u,short v)
{nod* p=new nod;
p->inf=v;
p->adr=G[u];
G[u]=p;}
short caut(short u)
{if(F[u])return 0;
F[u]=1;
nod* p=G[u];
while(p)
{if(!R[p->inf])
{R[p->inf]=u;
L[u]=p->inf;
return 1;}
p=p->adr;}
p=G[u];
while(p)
{if(caut(R[p->inf]))
{R[p->inf]=u;
L[u]=p->inf;
return 1;}
p=p->adr;}
return 0;}
int main()
{ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int E;
f>>N>>M>>E;
for(;E;--E)
{f>>u>>v;
ad(u,v);}
while(!sf)
{sf=1;
memset(F,0,sizeof(F));
for(i=1;i<=N;++i)
if(!L[i]&&caut(i))
sf=0;}
for(i=1;i<=N;++i)
if(L[i])
++c;
g<<c<<'\n';
for(i=1;i<=N;++i)
if(L[i])
g<<i<<' '<<L[i]<<'\n';
return 0;
}