Pagini recente » Cod sursa (job #1480779) | Cod sursa (job #352475) | Cod sursa (job #1409116) | Cod sursa (job #875134) | Cod sursa (job #857094)
Cod sursa(job #857094)
#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();
}