Pagini recente » Cod sursa (job #2469730) | Cod sursa (job #262844) | Cod sursa (job #2854362) | Cod sursa (job #694560) | Cod sursa (job #1528387)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("biconexe.in");
ofstream out("biconexe.out");
const int NMAX = 100000;
vector <int> G[NMAX+2];
int N, M;
int d[NMAX+2], l[NMAX+2], c[NMAX+2], t[NMAX+2], time = 0;
int TAT = 0, FII = 0;
void MAGIC_DFS( int nod ) {
d[nod] = ++time;
l[nod] = time;
for( int i = 0; i < (int)G[nod].size(); ++i ) {
int v = G[nod][i];
if( !d[v] ) { /// v este FIU lui NOD
t[v] = nod;
FII += ( nod == TAT );
MAGIC_DFS( v );
if( l[v] >= d[nod] ) {
c[nod] = 1;
}
l[nod] = min( l[v], l[nod] );
}
else { /// v = TATAL luui NOD
if( t[nod] != v ) {
l[nod] = min( l[nod], d[v] );
}
}
}
}
int main()
{
in >> N >> M;
for( int i = 1; i <= M; ++i ) {
int x,y;
in >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
TAT = 1;
MAGIC_DFS(1);
out << FII << '\n';
for( int i = 1; i <= N; ++i ) out << c[i] << ' ';
return 0;
}