Cod sursa(job #918751)

Utilizator apopeid13Apopeid Alejandro apopeid13 Data 19 martie 2013 09:22:58
Problema Strazi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<fstream>
#include<vector>
#include<cstring>
using namespace std;
ofstream g("strazi.out");
int i,j,n,m,viz[256],tata[265],fiu[256],x,y,nr,ok;
vector<int> a[256];
int cupleaza(int nod)
{
int i;
if(viz[nod])
return 0;
viz[nod]=1;
for(i=0;i<a[nod].size();++i)
if(!tata[a[nod][i]]||cupleaza(tata[a[nod][i]]))
{
fiu[nod]=a[nod][i];
tata[a[nod][i]]=nod;
return 1;
}
return 0;
}
int df(int nod)
{
if(!fiu[nod])
return nod;
return df(fiu[nod]);
}
void afis(int nod)
{
if(!nod )
return ;
g<<nod<<" ";
afis(fiu[nod]);
}
int main()
{
ifstream f("strazi.in");
f>>n>>m;
for(i=1;i<=m;++i)
{
f>>x>>y;
a[x].push_back(y);
}
for(i=1;i<=n;++i)
{
memset(viz,0,sizeof(viz));
cupleaza(i);
}
for(i=1;i<=n;++i)
if(!tata[i])
++nr;
g<<nr-1<<"\n";
for(i=1;i<=n;++i)
if(!tata[i])
{
x=df(i);
ok=0;
for(j=1;j<=n&&!ok;++j)
if(!tata[j]&&i!=j)
{
ok=1;
g<<x<<" "<<j<<"\n";
tata[j]=x;
fiu[x]=j;
}
}
for(i=1;i<=n;++i)
if(!tata[i])
afis(i);
return 0;
}