Cod sursa(job #3352113)

Utilizator SkibidiCezarCezar Bolba SkibidiCezar Data 23 aprilie 2026 20:17:11
Problema Componente biconexe Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>
#define in fin
#define out fout

using namespace std;
ifstream fin ("biconex.in");
ofstream fout ("biconex.out");
int n, m, a, b, cnt, cntroot;
vector <int> g[100005];
int d[100005], dp[100005];
bool viz[100005], viz1[100005], art[100005];
void dfs(int nod){
    viz[nod] = 1;
    viz1[nod] = 1;
    dp[nod] = INT_MAX;
    for(int i = 0; i < g[nod].size(); i++){
        if(viz1[g[nod][i]]){
            dp[nod] = min(dp[nod], d[g[nod][i]]);
        }
        else if(!viz[g[nod][i]]){
            d[g[nod][i]] = d[nod] + 1;
            dfs(g[nod][i]);
            if(nod != 1 && dp[g[nod][i]] >= d[nod]){
                art[nod] = 1;
                cnt++;
            }
            dp[nod] = min(dp[nod], dp[g[nod][i]]);
        }
        else if(nod == 1){
            cntroot--;
        }
    }
    viz1[nod] = 0;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    in >> n >> m;
    for(int i = 1; i <= m; i++){
        in >> a >> b;
        g[a].push_back(b);
        g[b].push_back(a);
    }
    cntroot = g[1].size();
    d[1] = 1;
    dfs(1);
    if(cntroot > 1){
        art[1] = 1;
    }
    out << cntroot + cnt;
    return 0;
}