Cod sursa(job #2782725)

Utilizator Botnaru_VictorBotnaru Victor Botnaru_Victor Data 12 octombrie 2021 21:20:32
Problema Componente biconexe Scor 24
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#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;
}