• CF741C.Arpa’s overnight party and Mehrdad’s silent entering [构造 二分图染色]


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

    题意:

    有 n 对情侣坐成一个圈,有两种食物Kooft and Zahre-mar,要给每个人分其中一种,要求每对情侣的食物不同,任意连续的三个人必须要有两人食物不同。

    求分配方案,无解输出-1

    1≤n ≤100000


    注意:“Kooft” is something make people die. “Zahre-mar” meaning is “Venom of Snake”.

    好开心啊

    构造。

    情侣连边。为满足连续三人有两人不同,强制2i和2i+1连边。

    这样不会产生奇环,一定有解,二分图染色

    #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]] << '
    ';
    }
    
    
  • 相关阅读:
    实现div 垂直居中
    CSS 轮廓---outline属性
    CSS 伪类 (Pseudo-classes)
    HTML默认样式和浏览器默认样式
    VHDL之concurrent之block
    VHDL之concurrent之generate
    VHDL之concurrent之when
    VHDL之concurrent之operators
    QS之force(2)
    QS之force(1)
  • 原文地址:https://www.cnblogs.com/candy99/p/9324100.html
Copyright © 2020-2023  润新知