HDU-3478Catch二分图的否命题

Posted ckxkexing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU-3478Catch二分图的否命题相关的知识,希望对你有一定的参考价值。

HDU-3478Catch

题意:考虑Thief能否;

由于我推着推着就想到必须要三点可以互通,和二分图的结论正好相反,所以就试了一发,

真没想到thief的初始位置是不用考虑的。

下面是ac代码:

#include <bits/stdc++.h>
using namespace std;
int n,m,s,book[100000+10];
vector<int> mp[100000+10];
bool dfs(int u)
{
    queue <int>q;
    q.push(u);
    book[u]=1;
    while(!q.empty())
    {
        int from = q.front();
        q.pop();
        for(int i=0;i<mp[from].size();i++)
        {
            int tmp = mp[from][i];
            if(book[tmp]==-1)
            {
                book[tmp]=!book[from];
                q.push(tmp);
            }

            else if(book[tmp]==book[from])
                return false;
        }

    }
    return true;
}
void init(){
    for(int i=0;i<n;i++)
        mp[i].clear();
    memset(book,-1,sizeof(book));
}
int main(){
    int ca=0,t;
    scanf("%d",&t);
    while(t--)
    {
        init();
        scanf("%d%d%d",&n,&m,&s);
        for(int i=1;i<=m;i++)
        {
            int u,v;
            scanf("%d%d",&u,&v);
            mp[u].push_back(v);
            mp[v].push_back(u);
        }
        bool flag  = false ;
        for(int i=0; i<n &&!flag ;i++)
        {
                if(book[i]==-1&&!dfs(i))
                {
                    flag = true;
                    break;
                }
        }

        if(flag)printf("Case %d: YES\n",++ca);
        else printf("Case %d: NO\n",++ca);
    }

    return 0;
}

 

以上是关于HDU-3478Catch二分图的否命题的主要内容,如果未能解决你的问题,请参考以下文章

《离散数学》——图论6.6

反证法

2-SAT 入门

你知道二分的实质吗?怎么样的模板才能一次就通过?

php 一个自定义的try..catch包装器代码片段,用于执行模型函数,使其成为一个单行函数调用

GLSL:使用片段着色器进行对象翻译