Pagini recente » Cod sursa (job #300149) | Cod sursa (job #1388988) | Cod sursa (job #513410) | Cod sursa (job #1791605) | Cod sursa (job #476245)
Cod sursa(job #476245)
#include<fstream>
#include<list>
#define NMAX 100010
using namespace std;
typedef list<int>::iterator ITL;
list<int> a[NMAX];
int viz[NMAX], c[NMAX], b[NMAX], i, x, y, n, m, grad[NMAX], p, u, s;
void DFS(int nod, int prec)
{
ITL it;
b[nod]=prec;
viz[nod]=1;
for(it=a[nod].begin(); it!=a[nod].end(); ++it)
if (viz[*it]==0)
{
++grad[nod];
DFS(*it,nod);
}
}
int main()
{
ifstream f("mesaj4.in");
ofstream g("mesaj4.out");
f>>n>>m;
for(i=1; i<=m; ++i)
{
f>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
}
DFS(1,0);
s=0;
for(i=1; i<=n; i++)
{
s+=viz[i];
if(grad[i]==0) {c[++u]=i; ++viz[i]; --grad[b[c[u]]];}
}
if (s!=n) g<<"-1\n";
else
{
p=1;
while(p<=u)
{
if(viz[b[c[p]]]==1 && b[c[p]]!=1 && grad[b[c[p]]]==0)
{
c[++u]=b[c[p]];
++viz[b[c[p]]];
--grad[b[c[u]]];
}
++p;
}
g<<2*n-2<<"\n";
for(i=1; i<=u; ++i)
g<<c[i]<<" "<<b[c[i]]<<"\n";
for(i=u; i>0; --i)
g<<b[c[i]]<<" "<<c[i]<<"\n";
}
return 0;
f.close();
g.close();
return 0;
}