• HDU5424——DFS——Rikka with Graph II


    http://acm.hdu.edu.cn/showproblem.php?pid=5424

    /*
    对于一个连通图,有N个顶点,如果有N条边,那么肯定有环
    因为N个点如果不成环最多N-1条边。。。然后找最小度的点DFS就行。。。 
    */
    /************************************************
    * Author        :Powatr
    * Created Time  :2015-8-31 17:29:13
    * File Name     :HDU5424.cpp
     ************************************************/
    
    #include <cstdio>
    #include <algorithm>
    #include <iostream>
    #include <sstream>
    #include <cstring>
    #include <cmath>
    #include <string>
    #include <vector>
    #include <queue>
    #include <deque>
    #include <stack>
    #include <list>
    #include <map>
    #include <set>
    #include <bitset>
    #include <cstdlib>
    #include <ctime>
    using namespace std;
    
    #define lson l, mid, rt << 1
    #define rson mid + 1, r, rt << 1 | 1
    typedef long long ll;
    const int MAXN = 1e3 + 10;
    const int INF = 0x3f3f3f3f;
    const int MOD = 1e9 + 7;
    
    int deg[MAXN];
    int n;
    int mp[MAXN][MAXN];
    int vis[MAXN];
    vector<int> G[MAXN];
    int flag;
    void dfs(int u, int num)
    {
        if(flag == 1) return;
        if(num == n){
            flag = 1;
            return ;
        }
        for(int i = 0; i < G[u].size(); i++){
            int v = G[u][i];
            if(!vis[v]){
                vis[v] = 1;
                dfs(v, num+1);
                vis[v] = 0;
            }
        }
    }
    int main(){
        int u, v;
        while(~scanf("%d", &n)){
            memset(mp, 0, sizeof(mp));
            memset(vis, 0, sizeof(vis));
            memset(deg, 0, sizeof(deg));
            for(int i = 1; i <= n; i++)
                G[i].clear();
            for(int i = 1; i <= n; i++){
                scanf("%d%d", &u, &v);
                if(mp[u][v] == 0 ){
                mp[u][v] = mp[v][u] = 1;
                G[u].push_back(v);
                G[v].push_back(u);
                deg[u]++;
                deg[v]++;
                }
            }
            int tot = 0;
            int id = 1;
            for(int i = 1; i <= n; i++)
                if(deg[i] == 1){
                    id = i;
                    tot++;
                }
            if(tot > 2){
                puts("NO");
                continue;
            }
            flag = 0;
            vis[id] = 1;
            dfs(id, 1);
            printf("%s
    ", !flag ? "NO" : "YES");
        }
        return 0;
    }
                
    

      

  • 相关阅读:
    【sqlite】3.ADO.NET实体数据模型增删改查
    【sqlite】1.Vs2019 ado.net实体模型安装教程
    【sqlite】2.Nuget下载好Sqlite.EF6后出现运行报错处理办法
    WPF-数据绑定:日期时间格式
    Entity Framework Database.SetInitializer的几种参数
    收藏
    Sql时间函数
    SQL中的循环、for循环、游标
    C# DateTime 时间格式
    js setInterval()函数 [倒计时用]
  • 原文地址:https://www.cnblogs.com/zero-begin/p/4773910.html
Copyright © 2020-2023  润新知