Cod sursa(job #3341039)

Utilizator ana_maria_772Toc Ana-Maria ana_maria_772 Data 17 februarie 2026 18:14:28
Problema Componente biconexe Scor 0
Compilator cpp-32 Status done
Runda Arhiva educationala Marime 1.88 kb
{\rtf1\ansi\ansicpg1252\cocoartf2759
\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
\paperw11900\paperh16840\margl1440\margr1440\vieww34000\viewh21380\viewkind0
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0

\f0\fs24 \cf0 #include <fstream>\
#include <vector>\
#include <stack>\
#define NRnoduri 100001\
using namespace std;\
\
ifstream cin("biconex.in");\
ofstream cout("biconex.out");\
\
int n, m, tata[NRnoduri], nivel[NRnoduri], nma[NRnoduri], nrc;\
vector <int> vecini[NRnoduri], componente[NRnoduri];\
stack <int> s;\
\
void DFS(int nod) \{\
    s.push(nod);\
    nivel[nod]= nivel[tata[nod]] + 1;\
    nma[nod]= nivel[nod];\
    for (int i=0; i<vecini[nod].size(); i++)\
    \{\
        int next= vecini[nod][i];\
        if (nivel[next] and tata[nod]!=next)\
        \{\
            if (nma[nod]>nivel[next])\
                nma[nod]= nivel[next];\
        \}\
        else if (!nivel[next])\
        \{\
            tata[next]= nod;\
            DFS(next);\
            if (nma[next]<nma[nod])\
                nma[nod]= nma[next];\
            if (nivel[nod]<=nma[next])\
            \{\
                nrc++;\
                while (s.top()!=next)\
                    componente[nrc].push_back(s.top()), s.pop();\
                componente[nrc].push_back(s.top()), s.pop();\
                componente[nrc].push_back(nod);\
            \}\
        \}\
    \}\
\}\
\
int main() \{\
    cin>>n>>m;\
    while (m--) \
    \{\
        int i, j;\
        cin>>i>>j;\
        vecini[i].push_back(j);\
        vecini[j].push_back(i);\
    \}\
    DFS(1);\
    cout<< nrc <<"\\n";\
    for (int i=1; i<=nrc; i++, cout<<"\\n")\
        for (int j= componente[i].size() -1; j>=0; j--)\
            cout<< componente[i][j] <<" ";\
    return 0;\
\}\
}