Pagini recente » Cod sursa (job #2601892) | Cod sursa (job #1355382) | Cod sursa (job #2885003) | Cod sursa (job #1995143) | Cod sursa (job #964330)
Cod sursa(job #964330)
#include<fstream>
#include<vector>
#include<cstring>
using namespace std;
ifstream f("strazi.in");
ofstream g("strazi.out");
int i,j,n,m,nr,x,y,fiu[300],t[300];
vector<int>v[300];
bool viz[300];
inline int cuplaj(int x)
{
if(viz[x])
return 0;
viz[x]=1;
for(vector<int>::iterator it=v[x].begin();it!=v[x].end();++it)
if(!t[*it]||cuplaj(*it))
{
t[*it]=x;
fiu[x]=*it;
return 1;
}
return 0;
}
inline int dfs(int x)
{
if(!fiu[x])
return x;
return dfs(fiu[x]);
}
inline void afiseaza(int x)
{
if(!x)
return ;
g<<x<<' ';
afiseaza(fiu[x]);
}
int main()
{
f>>n>>m;
for(i=1;i<=m;++i)
{
f>>x>>y;
v[x].push_back(y);
}
for(i=1;i<=n;++i)
{
memset(viz,0,sizeof(viz));
cuplaj(i);
}
for(i=1;i<=n;++i)
if(!t[i])
++nr;
g<<nr-1<<'\n';
for(i=1;i<=n;++i)
if(!t[i])
{
x=dfs(i);
for(j=1;j<=n;++j)
if(i!=j&&!t[j])
{
g<<x<<' '<<j<<'\n';
fiu[x]=j;
t[j]=x;
break;
}
}
for(i=1;i<=n;++i)
if(!t[i])
{
afiseaza(i);
}
return 0;
}