Cod sursa(job #3265685)

Utilizator rarest@yahoo.comtorcea rares [email protected] Data 2 ianuarie 2025 15:10:19
Problema Componente biconexe Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.08 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("biconex.in");
ofstream g("biconex.out");

int a[101][101];
int cer;
int n,m;
int v[101];
int niv[101];
int nma[101];
int pct[101];
int p,cnt;
stack<int> stiva;

struct muchie
{
    int x;
    int y;
};

muchie q[101];
vector<int>comp[101];
int crt;

void adart(int k,int tata)
{
    v[k]=1;
    niv[k]=niv[tata]+1;
    nma[k]=niv[k];
    stiva.push(k);
    int i;
    for(i=1;i<=n;i++)
    {
        if(i!=tata && a[k][i]==1)
            if(v[i]==1)
            {
                if(nma[k]>niv[i])
                    nma[k]=niv[i];
            }
            else
            {
                adart(i,k);
                if(nma[k]>nma[i])
                    nma[k]=nma[i];
                if(niv[k]<=nma[i] && k!=1)
                {
                    p++;
                    pct[p]=k;
                }

                if(nma[i]>niv[k])
                {
                    cnt++;
                    q[cnt].x=k;
                    q[cnt].y=i;
                }

                crt++;
                if(niv[k]<=nma[i])
                {
                    while(stiva.top()!=i)
                    {
                        comp[crt].push_back(stiva.top());
                        stiva.pop();
                    }

                    comp[crt].push_back(i);
                    comp[crt].push_back(k);
                    stiva.pop();
                }
            }
    }
}

int main()
{
    f>>cer;
    f>>n>>m;
    int i,j,x,y;
    for(i=1;i<=m;i++)
    {
        f>>x>>y;
        a[x][y]=a[y][x]=1;
    }

    adart(1,0);
    sort(pct+1,pct+p+1);
    if(cer==3)
    {
        for(i=1;i<=p;i++)
            g<<pct[i]<<" ";
    }
    else
        if(cer==2)
        {
            for(i=1;i<=cnt;i++)
                g<<q[i].x<<" "<<q[i].y<<endl;
        }
        else
        {
            for(i=1;i<=crt;i++,g<<endl)
            {
                for(auto j:comp[i])
                    g<<j<<" ";
            }
        }
    return 0;
}