#include<iostream>
using namespace std;
int bridge[N][2];
int col[N],low[N],dep[N],iscut[N],nb;
int dfs(int u,int fa,int depth)
{
col[u]=1;
dep[u]=low[u]=depth;
int tol=0;
int tofa=0;//判斷u,v之間是否有兩條以上邊
int i,v;
for(i=0;i<list[u].size();i++)
{
v=list[u][i];
if(col[v]==0)
{
tol++;
dfs(v,u,depth+1);
low[u]=min(low[u],low[v]);
/*求割點
if(u==root&&col>1||x!=root&&low[v]>=dep[u])
iscut[u]=1;
*/
/*求橋
if(low[v]>dep[u])
{
bridge[++nb][0]=u;
bridge[nb][1]=v;
}
*/
}
else
{
if(v!=fa||tofa)
low[u]=min(low[u],dep[v]);
else
tofa=1;
}
}
return 0;
}
int main()
{

root=1;
dfs(root,-1,1);

}
using namespace std;
int bridge[N][2];
int col[N],low[N],dep[N],iscut[N],nb;
int dfs(int u,int fa,int depth)
{
col[u]=1;
dep[u]=low[u]=depth;
int tol=0;
int tofa=0;//判斷u,v之間是否有兩條以上邊
int i,v;
for(i=0;i<list[u].size();i++)
{
v=list[u][i];
if(col[v]==0)
{
tol++;
dfs(v,u,depth+1);
low[u]=min(low[u],low[v]);
/*求割點
if(u==root&&col>1||x!=root&&low[v]>=dep[u])
iscut[u]=1;
*/
/*求橋
if(low[v]>dep[u])
{
bridge[++nb][0]=u;
bridge[nb][1]=v;
}
*/
}
else
{
if(v!=fa||tofa)
low[u]=min(low[u],dep[v]);
else
tofa=1;
}
}
return 0;
}
int main()
{

root=1;
dfs(root,-1,1);

}

