CF741C.Arpa’s overnight party and Mehrdad’s silent entering [構造 二分圖染色]

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

題意:ios

有 n 對情侶坐成一個圈,有兩種食物Kooft and Zahre-mar,要給每一個人分其中一種,要求每對情侶的食物不一樣,任意連續的三我的必需要有兩人食物不一樣。spa

求分配方案,無解輸出-1code

1≤n ≤100000ci


注意:「Kooft」 is something make people die. 「Zahre-mar」 meaning is 「Venom of Snake」.get

好開心啊string

構造。it

情侶連邊。爲知足連續三人有兩人不一樣,強制2i和2i+1連邊。io

這樣不會產生奇環,必定有解,二分圖染色class

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 2e5+5;

int n, a[N], b[N];
struct edge {
    int v, ne;
} e[N<<1];
int cnt, h[N];
inline void ins(int u, int v) {
    e[++cnt] = (edge) {v, h[u]}; h[u] = cnt;
    e[++cnt] = (edge) {u, h[v]}; h[v] = cnt;
}

int col[N];
void dfs(int u, int p) {
    col[u] = p;
    for(int i=h[u]; i; i=e[i].ne) {
        int v = e[i].v;
        if(col[v]) continue;
        dfs(v, 3-p);
    }
}
int main() {
    //freopen("in", "r", stdin);
    ios::sync_with_stdio(false); cin.tie(); cout.tie();
    cin >> n;
    for(int i=1; i<=n; i++) {
        cin >> a[i] >> b[i];
        ins(a[i], b[i]);
        ins(i<<1, i<<1|1);
    }

    for(int i=1; i<=n<<1; i++) if(!col[i]) dfs(i, 1);
    for(int i=1; i<=n; i++) cout << col[a[i]] << ' ' << col[b[i]] << '\n';
}
相關文章
相關標籤/搜索