zoukankan      html  css  js  c++  java
  • hdu 3478(判断奇环)

    题意:给你一个无向图,问你有没有可能存在一个奇环连接所有的节点。

    分析:好久没写博客了,这个好习惯还是要继续保持的!这道题通过转化之后就是问你有没有存在一个奇环连接所有的节点,这里用到的方法是染色法,这是一个做题时的技巧,掌握好久ok了!

    代码实现:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    #include<queue>
    using namespace std;
    
    vector<int>edge[500005];
    int n,m,s,visited[500005];
    
    int solve()
    {
        int i,p,x,flag=0;
        queue<int>Q;
        memset(visited,0,sizeof(visited));
        Q.push(s);
        visited[s]=1;
        while(!Q.empty())
        {
            p=Q.front();
            Q.pop();
            for(i=0;i<edge[p].size();i++)
            {
               x=edge[p][i];
               if(visited[x]==0)
               {
                   visited[x]=-visited[p];
                   Q.push(x);
               }
               else if(visited[x]==visited[p])//判断是否形成奇环
                flag=1;
            }
        }
        for(i=0;i<n;i++)//判断是否联通所有的节点
            if(visited[i]==0)
                return 0;
        return flag;
    }
    
    int main()
    {
        int i,j,T,t1,t2;
        scanf("%d",&T);
        for(j=1;j<=T;j++)
        {
            scanf("%d%d%d",&n,&m,&s);
            for(i=0;i<n;i++)
                edge[i].clear();
            for(i=0;i<m;i++)
            {
                scanf("%d%d",&t1,&t2);
                edge[t1].push_back(t2);
                edge[t2].push_back(t1);
            }
            if(solve()==1)
                printf("Case %d: YES
    ",j);
            else
                printf("Case %d: NO
    ",j);
        }
        return 0;
    }
  • 相关阅读:
    牛客网 二叉树的镜像 JAVA
    牛客网 反转链表 JAVA
    牛客网 调整数组顺序使奇数位于偶数前面 JAVA
    Integer to Roman LeetCode Java
    Valid Number leetcode java
    Longest Common Prefix
    Wildcard Matching leetcode java
    Regular Expression Matching
    Longest Palindromic Substring
    Add Binary LeetCode Java
  • 原文地址:https://www.cnblogs.com/jiangjing/p/3597105.html
Copyright © 2011-2022 走看看