zoukankan      html  css  js  c++  java
  • ural 1227 dfs判环&求最长路

    问题可以简化为求最长路,因为边权均为正,所以有环即意味着最长路是正无穷必定有解;而无环的情况可以以每个点为起点进行dfs求出以该点为起点的最长路如果不小于s即有解。

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 using namespace std;
     5 
     6 const int INF = 999999999;
     7 const int N = 101;
     8 const int M = 20000;
     9 bool visit[N];
    10 int g[N][N];
    11 int n, m, s;
    12 
    13 int dfs( int u, int fa )
    14 {
    15     int res = 0;
    16     visit[u] = 1;
    17     for ( int i = 1; i <= n; i++ )
    18     {
    19         if ( !g[u][i] ) continue;
    20         if ( i == fa ) continue;
    21         if ( visit[i] )
    22         {
    23             visit[u] = 0;
    24             return INF;
    25         }
    26         int tmp = dfs( i, u );
    27         if ( tmp == INF )
    28         {
    29             visit[u] = 0;
    30             return INF;
    31         }
    32         res = max( res, g[u][i] + tmp );
    33     }
    34     visit[u] = 0;
    35     return res;
    36 }
    37 
    38 int main ()
    39 {
    40     while ( scanf("%d%d%d", &n, &m, &s) != EOF )
    41     {
    42         memset( g, 0, sizeof(g) );
    43         bool flag = false;
    44         while ( m-- )
    45         {
    46             int u, v, w;
    47             scanf("%d%d%d", &u, &v, &w);
    48             if ( g[u][v] || u == v )
    49             {
    50                 flag = true;
    51             }
    52             g[u][v] = g[v][u] = w;
    53         }
    54         if ( flag )
    55         {
    56             puts("YES");
    57             continue;
    58         }
    59         memset( visit, 0, sizeof(visit) );
    60         for ( int i = 1; i <= n; i++ )
    61         {
    62             if ( dfs( i, -1 ) >= s )
    63             {
    64                 flag = true;
    65                 break;
    66             }
    67         }
    68         puts( flag ? "YES" : "NO" );
    69     }
    70     return 0;
    71 }
  • 相关阅读:
    Python入门--14--字典
    Python入门--13--爬虫一
    Python入门--13--递归
    Python入门--12--函数与变量
    Python入门--11--自定义函数
    Python入门--10--序列
    mysql 删除重复记录
    Java 不可编辑的Map
    mysql left join
    mysql 超过5名学生的课
  • 原文地址:https://www.cnblogs.com/huoxiayu/p/4854437.html
Copyright © 2011-2022 走看看