Pagini recente » Cod sursa (job #208968) | Cod sursa (job #807589) | Cod sursa (job #2017830) | Cod sursa (job #762056) | Cod sursa (job #729966)
Cod sursa(job #729966)
#include<fstream>
#include<vector>
#define maxn 10010
#define pb push_back
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
vector<int> graf[maxn];
int N,M,E,layer[maxn],rasp,conect[maxn];
int viz[maxn];
int cuplaj(int nod)
{
if(viz[nod]==1)
return 0;
viz[nod]=1;
int k;
for(k=0;k<graf[nod].size();k++)
if(!conect[graf[nod][k]])
{
layer[nod]=graf[nod][k];
conect[graf[nod][k]]=nod;
return 1;
}
for(k=0;k<graf[nod].size();k++)
if(cuplaj(graf[nod][k]))
{
layer[nod]=graf[nod][k];
conect[graf[nod][k]]=nod;
return 1;
}
return 0;
}
int main()
{
in>>N>>M>>E;
int i,j;
for(;E;E--)
{
in>>i>>j;
graf[i].pb(j);
}
bool pos=true;
while(pos)
{
pos=false;
memset(viz,0,sizeof(viz));
for(i=1;i<=N;i++)
if(layer[i]==0 && cuplaj(i))
{
pos=true;
rasp++;
}
}
out<<rasp<<"\n";
for(i=1;i<=N;i++)
if(layer[i]!=0)
out<<i<<" "<<layer[i]<<"\n";
return 0;
}