hdu 4612 Warm up (二)

2014-11-23 21:42:19 · 作者: · 浏览: 11
{ 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