Pagini recente » Cod sursa (job #3177094) | Cod sursa (job #2131293) | Istoria paginii runda/oni_2007_ziua1_clasele_xi-xii | Cod sursa (job #801334) | Cod sursa (job #906017)
Cod sursa(job #906017)
#include<cstdio>
#include<vector>
#include<cstring>
#define NMAX 10005
#define vec G[nod][i]
#define CUPLARE { l[nod]=vec; r[vec]=nod; return 1; }
using namespace std;
FILE *fin,*fout;
vector<int> G[NMAX];
bool use[NMAX];
int n,m,l[NMAX],r[NMAX];
void read()
{
fin=fopen("cuplaj.in","r");
int edges,x,y;
fscanf(fin,"%d %d %d",&n,&m,&edges);
while(edges--)
{
fscanf(fin,"%d %d",&x,&y);
G[x].push_back(y);
}
fclose(fin);
}
void print()
{
fout=fopen("cuplaj.out","w");
int s=0;
for(int i=1;i<=n;i++)
if(l[i])
s++;
fprintf(fout,"%d\n",s);
for(int i=1;i<=n;i++)
if(l[i])
fprintf(fout,"%d %d\n",i,l[i]);
fclose(fout);
}
bool pairup(int nod)
{
if(use[nod])
return 0;
use[nod]=1;
for(size_t i=0;i<G[nod].size();i++)
if(!r[vec])
CUPLARE
for(size_t i=0;i<G[nod].size();i++)
if(pairup(r[vec]))
CUPLARE
return 0;
}
int main()
{
read();
bool sw=1;
while(sw)
{
sw=0;
memset(use,0,sizeof(use));
for(int i=1;i<=n;i++)
if(!l[i])
sw|=pairup(i);
}
print();
return 0;
}