|
{
int i;
cnt0=0;
memset(pre,0,sizeof(pre));
memset(low,0,sizeof(low));
memset(bridge,0,sizeof(bridge));
bcnt=0;
for(i=1;i<=n;i++)
{
if(!pre[i])
{
bridge_search(i,-1);
}
}
return bcnt;
}
int vis[maxn];
int dist[maxn];
void Dfs(int now,int num)
{
low[now]=num;
vis[now]=1;
int t,v,nn;
for(t=box[0][now];t+1;t=e[0][t].next)
{
v=e[0][t].to,nn=e[0][t].num;
if(bridge[nn])
continue;
if(!vis[v])
{
Dfs(v,num);
}
}
}
void lensolve(int now)
{
int t,v;
for(t=box[1][now];t+1;t=e[1][t].next)
{
v=e[1][t].to;
if(dist[v]==-1)
{
dist[v]=dist[now]+1;
lensolve(v);
}
}
}
void solve(int n,int num)
{
int i,sum=0;
memset(low,0,sizeof(low));
memset(vis,0,sizeof(vis));
for(i=1;i<=n;i++)
{
if(!low[i])
Dfs(i,++sum);
}
for(i=1;i<=n;i++)
{
int t,v;
for(t=box[0][i];t+1;t=e[0][t].next)
{
v=e[0][t].to;
if(low[i]!=low[v])
{
add(low[i],low[v],0,1);
add(low[v],low[i],0,1);
}
}
}
if(sum==1)
{
printf("0\n");
return;
}
memset(dist,-1,sizeof(dist));
dist[1]=0;
lensolve(1);
int ma=0,root;
for(i=1;i<=sum;i++)
{
if(ma
|