Cod sursa(job #857094)

Utilizator alinaelenaFMI Colceag Alina alinaelena Data 17 ianuarie 2013 11:52:42
Problema Componente biconexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.89 kb
#include<cstdio>
using namespace std;

 int n,m
vector <int> vec[10001];
vector <int> q;
vector <int> sol[10001];

int viz[10001];
int viz2[10001];
int nivel[10001];
int nrcomp;

void read()
{
	int i,j,x,y;
	scanf("%d %d",&n,&m);
	for (i=1;i<=n;++i)
	{	scanf("%d %d",&x,&y);
	  vec[x].push_back(y);
	  vec[y].push_back(x);
	}
}

void init()
{
	memset(v,0,sizeof(v);
	
}


void dfs (int nod,int niv,int tata)
{
	q.push_back(nod);
	viz[nod]=1;

	for (int i=0;i<vec[nod].size();++i)
    {
        int x=vec[nod][i];
	 if (nivel[x]==0)
        {
            stack.push_back(nod);
            dfs(x,niv,nod);

            if (viz[nod]>viz[x])
{
                viz[nod]=viz[x];
            }
		else
                if (viz[x]>=niv)
		{
                    int m=q.size();
			m--;
                    int j;
                    nrcomp++;

                    while (nod!=q[m])
			{
                        if (viz2[sq[m]]==0)
				{
                            sol[nr].push_back(q[m]);
                            viz[q[m]]=1;
                        }
                        m--;
                        q.pop_back();
                    }
                if (viz2[q[m]]==0) {
                    sol[nr].push_back(q[m]);
                }

                q.pop_back();
                for(int j=0;j<sol[nr].size();j++)
                        viz2[sol[nr][j]]=0;
                 
                }
        }else
            if ((niv[x]<viz[nod]) && x!=tata)
                viz[nod]=niv[x];
}

}


void write()
{
printf("%d",nrcomp);
        for ( i=1;i<=nrcomp;i++)
	{
            for (j=0;j<sol[i].size();++j)
                printf("%d",sol[i][j]);
	            
}
         
}


int main()
{
	freopen("biconexe.in","r",stdin);
	freopen("biconexe.out","w",stdout);
	for (i=1;i<=n;++i) if (!nivel[i]) dfs(i,1,0);
	
	
	read();
write();
}