Pagini recente » Cod sursa (job #1630815) | Cod sursa (job #744183) | Cod sursa (job #2808518) | Cod sursa (job #510456) | Cod sursa (job #1798928)
#include<bits/stdc++.h>
using namespace std;
ifstream f("strazi.in");
ofstream g("strazi.out");
int i,j,n,m,tata[256],fiu[256],x,y,nr,ok;
bool viz[256];
vector<int> a[256];
bool 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()
{
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) nr+=(!tata[i]);
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;
}