Cod sursa(job #1412510)

Utilizator UVS_Miriam_Piro_DianaFrumoasele si Bestialul UVS_Miriam_Piro_Diana Data 1 aprilie 2015 12:33:42
Problema Componente biconexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream in("biconex.in");
ofstream out("biconex.out");
const int Nmax = 100001;
vector<int> G[Nmax],C[Nmax];
int T[Nmax],L[Nmax],st[Nmax];
int N,M,K;
int dfs(int x,int l){
    int h=l,f,r;
    L[x]=l,st[++st[0]]=x;
    for(vector<int>::iterator it=G[x].begin();it!=G[x].end();++it){
        if(*it!=T[x]){
            if(L[*it]) h=min(h,L[*it]);
            else{
                T[*it]=x,f=st[0],r=dfs(*it,l+1);
                if(r>=L[x]){
                    C[++K].push_back(x);
                    while(st[0]!=f) C[K].push_back(st[st[0]--]);
                }
                h=min(h,r);
            }
        }
    }
    return h;
}
int main(){
    in>>N>>M;
    int x,y;
    for(int i=1;i<=M;i++){
        in>>x>>y;
        G[x].push_back(y);
        G[y].push_back(x);
    }
    dfs(1,1);
    out<<K<<'\n';
    for(int i=1;i<=K;i++){
        for(vector<int>::iterator it=C[i].begin();it!=C[i].end();++it) out<<*it<<' ';
        out<<'\n';
    }
    return 0;
}