zoukankan      html  css  js  c++  java
  • Codeforces Codeforces Round #383 (Div. 2) E (DFS染色)

    题目链接:http://codeforces.com/contest/742/problem/E

    题意:

    有一个环形的桌子,一共有n对情侣,2n个人,一共有两种菜。

    现在让你输出一种方案,满足以下要求:

    1. 情侣间吃不同的菜

    2. 相邻的三个人不能都吃同一种菜

    输出任意一个解:

    先将相邻的两个人连边,这样就满足了3个人不吃同样一种菜。

    情侣间连边。

    图中就不存在奇数环。

    那么就一定存在解。然后DFS染色就OK 了。

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 const int maxn = 2*100010;
     6 
     7 vector <int> G[maxn];
     8 int color[maxn];
     9 int b[maxn];
    10 int g[maxn];
    11 
    12 bool dfs(int u)
    13 {
    14     for(int i=0; i<G[u].size(); i++)
    15     {
    16         int v = G[u][i];
    17         if(color[u]==color[v]) return false;
    18         if(!color[v])
    19         {
    20             color[v] = 3 - color[u];
    21             if(!dfs(v)) return false;
    22         }
    23     }
    24     return true;
    25 }
    26 
    27 int main()
    28 {
    29     int n;
    30     scanf("%d",&n);
    31 
    32     for(int i=1; i<=n; i++)
    33     {
    34         G[i*2-1].push_back(2*i);
    35         G[i*2].push_back(2*i-1);
    36     }
    37 
    38     for(int i=0; i<n; i++)
    39     {
    40         int u,v;
    41         scanf("%d%d",&u,&v);
    42         G[u].push_back(v);
    43         G[v].push_back(u);
    44         b[i] = u;
    45         g[i] = v;
    46     }
    47 
    48     for(int i=1; i<=2*n; i++)
    49     {
    50         if(color[i]==0)
    51         {
    52             color[i] = 1;
    53             dfs(i);
    54         }
    55     }
    56 
    57     for(int i=0; i<n; i++)
    58     {
    59         printf("%d %d
    ",color[b[i]],color[g[i]]);
    60     }
    61     return 0;
    62 }
    View Code
  • 相关阅读:
    linux 静态库和动态库(共享库)的制作与使用
    实现linux mkdir命令
    行间距和文本样式
    单位和字体
    html标签2
    css层叠样式表
    html标签
    html简介
    数据数组
    Redis的使用
  • 原文地址:https://www.cnblogs.com/TreeDream/p/6568376.html
Copyright © 2011-2022 走看看