zoukankan      html  css  js  c++  java
  • poj 3895(求无向图的最大简单环)

    题目链接:http://poj.org/problem?id=3895

    思想很简单,就是dfs,并且用一个数组记录到该节点所走过的长度,然后如果遇到已经走过的,就说明存在环了, 更新一下ans。

     1 /*************************************************************************
     2     > File Name: poj3895.cpp
     3     > Author: syhjh
     4     > Created Time: 2014年03月02日 星期日 21时06分39秒
     5  ************************************************************************/
     6 #include <iostream>
     7 #include <cstdio>
     8 #include <cstring>
     9 #include <algorithm>
    10 using namespace std;
    11 
    12 const int MAXN = (5000 + 50);
    13 struct Edge {
    14     int v, next;
    15 } edge[MAXN << 1];
    16 
    17 int n, m, NE, ans;
    18 int head[MAXN];
    19 
    20 void Insert(int u, int v) 
    21 {
    22     edge[NE].v = v;
    23     edge[NE].next = head[u];
    24     head[u] = NE++;
    25 }
    26 
    27 bool mark[MAXN];
    28 int dp[MAXN];
    29 
    30 void dfs(int u, int len)
    31 {
    32     mark[u] = true;
    33     dp[u] = len;
    34     for (int i = head[u]; i != -1; i = edge[i].next) {
    35         int v = edge[i].v;
    36         if (!mark[v]) {
    37             dfs(v, len + 1);
    38         } else {
    39             ans = max(ans, dp[u] - dp[v] + 1);
    40         }
    41     }
    42 }
    43 
    44 int main()
    45 {
    46     int _case;
    47     cin >> _case;
    48     while (_case--) {
    49         cin >> n >> m;
    50         NE = 0;
    51         memset(head, -1, sizeof(head));
    52         while (m--) {
    53             int u, v;
    54             cin >> u >> v;
    55             Insert(u, v);
    56             Insert(v, u);
    57         }
    58         ans = 0;
    59         memset(mark, false, sizeof(mark));
    60         for (int i = 1; i <= n; i++) {
    61             if (!mark[i]) {
    62                 dfs(i, 1);
    63             }
    64         }
    65         if (ans <= 2) {
    66             cout << 0 << endl;
    67         } else
    68              cout << ans << endl;
    69     }
    70     return 0;
    71 }
    View Code
  • 相关阅读:
    前端TypeScript编写的代码发布后怎么在浏览器中调试
    oracle中的执行计划
    oracle中的物化视图
    oracle中的exists 和not exists 用法
    Oracle中的索引详解
    Oracle中动态SQL拼接
    oracle 中sql优化的几种方法
    oracle中常用函数大全
    Oracle中游标的用法
    oracle中表分区的实现
  • 原文地址:https://www.cnblogs.com/wally/p/3577300.html
Copyright © 2011-2022 走看看