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;
}

 

posted @ 2012-07-03 01:44  lenohoo  阅读(188)  评论(0编辑  收藏  举报