Cod sursa(job #2487983)

Utilizator Bogdan_BuzatuBuzatu Bogdan Mihai Bogdan_Buzatu Data 5 noiembrie 2019 22:12:56
Problema Componente biconexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include <fstream>
#include <vector>
#include<stack>
#include<algorithm>
using namespace std;
ifstream fin("biconex.in");
ofstream fout("biconex.out");
vector<int>a[100010];
vector<int>c[100010];
stack<int>s;
int v[100010],nv[100010],low[100010],k,f[100010],t,n,m,x,y,sol;
void dfs(int nod,int niv,int tata){
    v[nod]=1;
    nv[nod]=niv;
    low[nod]=niv;
    s.push(nod);
    for(int i=0;i<a[nod].size();i++){
        int vecin=a[nod][i];
        if(vecin!=tata){
           if(v[vecin]==1){
                low[nod]=min(low[nod],nv[vecin]);

            }
            else{
                dfs(vecin,niv+1,nod);
                low[nod]=min(low[nod],low[vecin]);
                if(low[vecin]>=nv[nod]){
                   k++;
                    do{
                        x=s.top();
                        c[k].push_back(s.top());
                        s.pop();
                    }while(x!=vecin);
                    c[k].push_back(nod);
                    f[nod]++;
                }
            }
        }

    }
}

int main(){

    fin>>n>>m;
    for(int i=1;i<=m;i++){
        fin>>x>>y;
        a[x].push_back(y);
        a[y].push_back(x);
    }
    dfs(1,1,0);
    for(int i=1;i<=k;i++){
        sort(c[i].begin(), c[i].end());
    }
    fout<<k<<"\n";
    for(int i=1;i<=k;i++){
        for(int j=0;j<c[i].size();j++){
            fout<<c[i][j]<<" ";
        }
        fout<<"\n";
    }


}