Pagini recente » Cod sursa (job #1958402) | Cod sursa (job #2311326) | Cod sursa (job #741969) | Cod sursa (job #576133) | Cod sursa (job #2782725)
#include <bits/stdc++.h>
#define nmax 100001
using namespace std;
ifstream f("biconex.in");
ofstream g("biconex.out");
vector<int> adj[nmax];
int n,m;
int bck[nmax],h[nmax];
int k=-1;
int hcmp(int a, int b)
{
return h[a]<h[b]?a:b;
}
int dfs(int oldnod,int nod,int in)
{
h[nod]=in;
int r=nod;
bck[nod]=nod;
for(auto e:adj[nod])
{
if(h[e]) {if(e!=oldnod) r=hcmp(e,nod);}
else {int res=dfs(nod,e,in+1); bck[nod]=hcmp(bck[nod],res); r=hcmp(r,res);}
}
if(bck[nod]==nod) k++;
return r;
}
void rfs(int nod)
{
//refolosim h ca vis
h[nod]=0;
if(bck[nod]==nod) g<<nod<<'\n';
for(auto e:adj[nod])
{ if(h[e])
{
g<<nod<<' ';
rfs(e);
}
}
}
int main()
{
f>>n>>m;
for(int i=0;i<m;i++)
{
int a,b;
f>>a>>b;
adj[a].push_back(b);
adj[b].push_back(a);
}
dfs(0,1,1);
bck[1]=0; //ca sa mearga distinctia de mai sus
g<<k<<'\n';
rfs(1);
return 0;
}