CF741C Arpa’s overnight party and Mehrdad’s silent entering

https://www.luogu.com.cn/problem/CF741C

怎么在ZR做过两次的题还是没想出来,逊捏

考虑对于 i = 1... n i=1...n i=1...n连边 2 i − > 2 i + 1 2i->2i+1 2i>2i+1,再把情侣连起来,这样连出来一定不存在奇环,即一定是个二分图,那么久可以黑白染色了

#include<bits/stdc++.h>
#define N 400050
using namespace std;
struct E {
    int u, v;
} e[N];
int col[N], n;
vector<int> g[N];
void insert(int u, int v) {
    g[u].push_back(v), g[v].push_back(u);
}
void dfs(int u, int o) {
    col[u] = o;
    for(int v : g[u]) {
        if(!col[v]) dfs(v, 3 - o);
    }
}
int main() {
    scanf("%d", &n);
    for(int i = 1; i <= n; i ++) {
        int u, v;
        scanf("%d%d", &u, &v);
        e[i].u = u, e[i].v = v;
        insert(u, v), insert(v, u);
    }   
    for(int i = 1; i <= 2 * n; i += 2) {
        insert(i, i + 1);
    }
    for(int i = 1; i <= 2 * n; i ++) if(!col[i]) dfs(i, 1);
    for(int i = 1; i <= n; i ++) {
        printf("%d %d\n", col[e[i].u], col[e[i].v]);
    }
    return 0;
}
posted @ 2021-12-04 08:07  lahlah  阅读(27)  评论(0编辑  收藏  举报