poj 3895 Cycles of Lanes dfs
题意:求最大环的边数,给出一个无向图,图中每条边的长度都是1,求图中最长环的长度是多少。
分析:dfs , 开一个数组pan作访问标记
View Code
#include <cstdio> #include <cstring> #include <iostream> using namespace std; const int maxn = 5000 , maxm = 500050; int pan[maxn]; bool vis[maxn]; struct Edge{ int v , next; }edge[maxm]; int E , head[maxn]; int n , m; inline void init() { E = 0; memset(head,-1,sizeof(head)); } inline void addedge(int u,int v) { edge[E].v=v;edge[E].next=head[u];head[u]=E++; edge[E].v=u;edge[E].next=head[v];head[v]=E++; } int ans; void dfs(int u , int num) { vis[u] = 1; pan[u] = num; for(int i=head[u];i!=-1;i=edge[i].next) { int v = edge[i].v; if(!vis[v]) dfs(v, num+1); else { int w = pan[u] - pan[v] + 1; if(w > ans) ans = w; } } } void solve() { init(); memset(vis,0,sizeof(vis)); scanf("%d%d",&n,&m); while(m--) { int u,v; scanf("%d%d",&u,&v); addedge(u,v); } ans = 0; dfs(1,1); ans>2?printf("%d\n",ans):printf("0\n"); } int main() { int T; scanf("%d",&T); while(T--) { solve(); } return 0; }