[POI2010]GIL-Guilds - 二分图染色,DFS

Posted mollnn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[POI2010]GIL-Guilds - 二分图染色,DFS相关的知识,希望对你有一定的参考价值。

给一张无向图,要求你用黑白灰给点染色,且满足对于任意一个黑点,至少有一个白点和他相邻;对于任意一个白点,至少有一个黑点与他相邻,对于任意一个灰点,至少同时有一个黑点和白点和灰点与他相邻,问能否成功

Solution

显然灰色是多余的

首先考虑什么样的情况是不行的,显然仅在有孤立点的时候会挂,而连通图一定可以

所以我们只需要拿起每个连通块 DFS 随便染即可

#include <bits/stdc++.h>
using namespace std;

const int N = 1000005;
vector <int> g[N];
int n,m,a[N],vis[N],cnt;

void dfs(int p) {
    ++cnt;
    vis[p]=1;
    for(auto q:g[p]) if(vis[q]==0) {
        a[q]=a[p]^1;
        dfs(q);
    }
}

signed main() {
    ios::sync_with_stdio(false);
    cin>>n>>m;
    for(int i=1;i<=m;i++) {
        int t1,t2;
        cin>>t1>>t2;
        g[t1].push_back(t2);
        g[t2].push_back(t1);
    }
    for(int i=1;i<=n;i++) {
        if(vis[i]==0) {
            cnt=0;
            dfs(i);
            if(cnt==1) {
                cout<<"NIE";
                return 0;
            }
        }
    }
    cout<<"TAK"<<endl;
    for(int i=1;i<=n;i++) cout<<(a[i]?'K':'S')<<endl;
}

以上是关于[POI2010]GIL-Guilds - 二分图染色,DFS的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 P3496 [POI2010]GIL-Guilds

bzoj 2095: [Poi2010]Bridges(二分法+混合图的欧拉回路)

bzoj2095: [Poi2010]Bridges(二分+混合图求欧拉回路)

「POI2010」Bridges

bzoj 2095 Poi2010 Bridges 混合图欧拉回路

bzoj 2095 [Poi2010]Bridges 判断欧拉维护,最大流+二分