• Split Into Two Sets Codeforces 1702E


    Problem - 1702E - Codeforces

    题目大意:每张多米诺骨牌上有1到n之间的两个数字,现给出n张牌,问能不能把骨牌分成两副,使得每一副骨牌中没有重复的数字。

    思路:很明显是个二分图检验问题,但每张骨牌上两个数字需要单独考虑,所以不能以骨牌为点建图,那么我们拿(5,6)(5,7)(8,6)(7,8)这四张牌举例,可以发现(5,6)(5,7)不能在一副牌中,(8,6)(7,8)不能是一副,即有相同数字的两张骨牌不能是一副。首先每个数字一定出现了两次,且我们只需要将出现的两个地方中的一个染成白色,同一个数字出现的另一张骨牌上的另一个数字就得被染成黑色比如我们可以把(5,6)中的5染成白色,那么(5,7)中的7就得是黑色,接着(7,8)中的8是白色(8,6)中的6是黑色,这样我们就得到了(5,6)(7,8)和(5,7)(8,6)两副牌,所以我们只需将每张骨牌上的两个数字之间连边,然后用染色法进行二分图检验

    1. #include
    2. using namespace std;
    3. const int N = 2e5 + 5;
    4. vector<int>g[N];
    5. int n;
    6. int col[N], cnt[N];
    7. bool flag = 1;
    8. void dfs(int now)//记录当前的点的编号
    9. {
    10. if (!flag)
    11. return;
    12. for (int i = 0; i < g[now].size(); i++)
    13. {//遍历当前点连接的所有边
    14. int next = g[now][i];
    15. if (!col[next])
    16. {
    17. col[next] = 3 - col[now];
    18. dfs(next);//如果下一个点没有被涂过色,就涂不同的颜色,继续向下遍历
    19. }
    20. else if (col[next] == col[now])
    21. {//如果当前点和下一个点颜色相同,则不符合二分图规则
    22. flag = 0;
    23. return;
    24. }
    25. }
    26. }
    27. int main()
    28. {
    29. int t;
    30. cin >> t;
    31. while (t--)
    32. {
    33. scanf("%d", &n);
    34. for (int i = 1; i <= n; i++)
    35. {
    36. g[i].clear();
    37. col[i] = cnt[i] = 0;//初始化
    38. }
    39. flag = 1;//判断是否是二分图的标志
    40. for (int i = 1; i <= n; i++)
    41. {
    42. int u, v;
    43. scanf("%d%d", &u, &v);
    44. cnt[u]++;
    45. cnt[v]++;//记录每个数字出现的次数
    46. if (cnt[u] > 2 || cnt[v] > 2)
    47. flag = 0;//如果出现次数多于2,则无法平分
    48. g[u].push_back(v);
    49. g[v].push_back(u);//邻接表存图
    50. }
    51. for (int i = 1; i <= n; i++)
    52. {//遍历所有连通分量
    53. if (col[i] == 0 && flag)
    54. {
    55. col[i] = 1;//初始化每个连通分量的第一个点的颜色
    56. dfs(i);
    57. }
    58. }
    59. if (flag)
    60. {
    61. printf("YES\n");
    62. }
    63. else
    64. {
    65. printf("NO\n");
    66. }
    67. }
    68. return 0;
    69. }

  • 相关阅读:
    我今年50岁了,还在干前端
    11 个最值得推荐的 Windows 数据恢复软件
    Android Kotlin 协程初探 | 京东物流技术团队
    XSAN数据恢复-存储空间架构迁移时误格式化存储系统的XSAN数据恢复案例
    数据密码学
    数据仓库面试总结大全,深度解析底层逻辑
    mysql 中 varchar 和 text 的区别
    【JavaEE基础与高级 第60章】Java中的反射获取成员方法Method、获取成员变量Field(下篇)
    【CAS:41994-02-9 |Biotinyl Tyramide|】生物素基酪氨酰胺
    Apache ShenYu网关初体验
  • 原文地址:https://blog.csdn.net/ashbringer233/article/details/126139464