Cod sursa(job #2371834)

Utilizator mariastStoichitescu Maria mariast Data 6 martie 2019 19:50:41
Problema Componente biconexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream f ("biconex.in");
ofstream g ("biconex.out");
vector<int>sol[100010],G[100010];
int t1[100010],t2[100010],st[100010];
int nr,n,m,nrcomp,k,x,y;
bool viz[100010];
void dfs(int x){
    ++nr;
    t1[x]=t2[x]=nr;
    viz[x]=1;
    st[++k]=x;
    for(int i=0;i<G[x].size();++i){
        if(!viz[G[x][i]]){
            int y=k;
            dfs(G[x][i]);
            t2[x]=min(t2[x],t2[G[x][i]]);
            if(t2[G[x][i]]>=t1[x]){
                ++nrcomp;
                while(k>y){
                    sol[nrcomp].push_back(st[k]);
                    k--;
                }
                sol[nrcomp].push_back(x);
            }
        }
        else t2[x]=min(t2[x],t1[G[x][i]]);
    }
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=m;++i){
        f>>x>>y;
        G[x].push_back(y);
        G[y].push_back(x);
    }
    dfs(1);
    g<<nrcomp<<'\n';
    for(int i=1;i<=nrcomp;++i){
        for(int j=0;j<sol[i].size();++j)
            g<<sol[i][j]<<" ";
        g<<'\n';
    }
}