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;
    }
  • 相关阅读:
    window10-jmeter安装
    软件开发模型
    软件测试的原则和流程
    手机APP测试
    优秀的软件测试工程师
    自动化测试
    测试用例
    软件测试功能分类
    ios-prefix文件最全
    催收策略及催收评分卡搭建
  • 原文地址:https://www.cnblogs.com/jiangjing/p/3597105.html
Copyright © 2011-2022 走看看