Problem - 1702E - Codeforces

波利卡普最近得到了一组n(数字n-偶数)的骨牌。每块多米诺骨牌包含1到n的两个整数。

他能把所有的骨牌分成两组,使每组骨牌上的数字都不一样吗?每张多米诺骨牌必须正好进入两组中的一组。

例如,如果他有4张多米诺骨牌:{1,4}、{1,3}、{3,2}和{4,2},那么波利卡普就能按要求把它们分成两组。第一组可以包括第一张和第三张骨牌({1,4}和{3,2}),第二组是第二张和第四张({1,3}和{4,2})。

输入
第一行包含一个整数t(1≤t≤104)--测试案例的数量。

接下来是测试用例的描述。

每个测试用例的第一行包含一个偶数整数n(2≤n≤2⋅105)--多米诺骨牌的数量。

接下来的n行包含一对数字ai和bi(1≤ai,bi≤n),描述第i块多米诺骨牌上的数字。

保证所有测试案例的n之和不超过2⋅105。

输出
对每个测试案例打印。

如果有可能将n块多米诺骨牌分成两组,使每组多米诺骨牌上的数字不同,则为YES。
如果不可能,则打印NO。
你可以在任何情况下打印YES和NO(例如,字符串yEs、yes、Yes和YES将被识别为一个肯定的答案)。

例子
inputCopy
6
4
1 2
4 3
2 1
3 4
6
1 2
4 5
1 3
4 6
2 3
5 6
2
1 1
2 2
2
1 2
2 1
8
2 1
1 2
4 3
4 3
5 6
5 7
8 6
7 8
8
1 2
2 1
4 3
5 3
5 4
6 7
8 6
7 8
输出拷贝

拒绝




备注
在第一个测试案例中,多米诺骨牌可以被划分如下。

第一组骨牌:[{1,2},{4,3}] 。
第二组骨牌:[{2,1},{3,4}] 。
换句话说,在第一组中,我们采取数字为1和2的骨牌,在第二组中,我们采取数字为3和4的骨牌。
在第二个测试案例中,没有办法将多米诺骨牌分成两组,其中至少有一组会包含重复的数字。

题解:
根据例子我们发现

将每一个骨牌看做双向边连接, 如样例5

2 1
1 2
4 3
4 3
5 6
5 7
8 6
7 8
连完后建成的图为 {1,2}-{2,1}, {3,4}-{3,4}, {5,6}-{6,8}-{8,7}-{7,5}三个环 不难发现当环是偶数环时候, 我们可以隔着取放在一个集合里面, 如 {5,6}-{6,8}-{8,7}-{7,5}, 取{5,6},{8,7}放在一个集合, 其他两个放在另一个集合(即构建出一个二分图), 这样取两个集合中是不会出现重复的, 而若出现奇数环时, 取牌必定会有重复, 所以建完图后, 判断是否存在奇数环即可.

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define int long long
//1 1 3 3 3
vector<int> p[200050];
int n;
map<int,int> vis;
map<int,int> st;
int dfs(int u,int x)
{st[u] = x;for(int i = 0;i < p[u].size();i++){int j = p[u][i];if(!st[j]){if(!dfs(j,3-x)){return 0;}}else if(st[j] == x){return 0;}}return 1;
}
void solve()
{cin >> n;vis.clear();st.clear();for(int i = 1;i <= n;i++){p[i].clear();}int f = 0;for(int i = 1;i <= n;i++){int a,b;cin >> a >> b;if(a == b){f = 1;}vis[a]++,vis[b]++;if(vis[a]>2||vis[b] > 2){f = 1;}p[a].push_back(b);p[b].push_back(a);}if(f){cout<<"NO\n";return ;}for(int i = 1;i <= n;i++){if(!st[i]){if(!dfs(i,1)){cout<<"NO\n";return ;}}}cout<<"YES\n";}
signed main()
{int t = 1;cin >> t;while(t--){solve();}
}
//2 5
//3
//9 7 //2  3 4 3

E. Split Into Two Sets(染色法判断二分图)相关推荐

  1. hdu 5285(染色法判断二分图)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5285 解题思路:很明显的是二分图的判定,用染色法即可. 不过这题有一个坑,当n<=1和m=0时要 ...

  2. NYOJ1015 二部图(染色法判断二分图)

    描述 二部图又叫二分图,我们不是求它的二分图最大匹配,也不是完美匹配,也不是多重匹配,而是证明一个图是不是二部图.证明二部图可以用着色来解决,即我们可以用两种颜色去涂一个图,使的任意相连的两个顶点颜色 ...

  3. 图论 —— 染色法判断二分图

    二分图定义 二分图,又称二部图,英文名叫 Bipartite graph. 二分图是什么?节点由两个集合组成,且两个集合内部没有边的图.换言之,存在一种方案,将节点划分成满足以上性质的两个集合. 二分 ...

  4. 图的遍历(染色法判断奇环)

    图的遍历(染色法判断奇环) 传送门 思路:首先图应该为连通图,所需要加的边数即addedge=add_{edge}=addedge​=连通块数−1-1−1 然后又因为是要每次走两步,即最后要走偶数步即 ...

  5. 【染色法判别二分图】

    模板题: AcWing 860. 染色法判定二分图 解题思路: (1)判断一个图是否是二分图,判断是否存在奇数环即可,用染色法判断即可. (2)二分图: 是指可以将点集分成两半,每个集合内都没有边,但 ...

  6. 染色法判定二分图 匈牙利算法

    染色法判定二分图 思路:相邻的点染不同颜色 看能不能染完 如果过程中出现相邻点相同颜色,就不可以 注意:需要遍历n个点 看此点是否被染色过 如果没有就进行一次dfs或bfs 二分图:可以把点分成两个集 ...

  7. 染色法判断无向图是否为二部图

    二分图 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的 ...

  8. AcWing 860. 染色法判定二分图 (染色法)

    题目链接 : 点击查看 题目描述 : 给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环. 请你判断这个图是否是二分图. 输入输出格式 : 输入 第一行包含两个整数 n 和 m. 接下来 m ...

  9. 二部图(染色法判断二部图)

     二部图 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 二部图又叫二分图,我们不是求它的二分图最大匹配,也不是完美匹配,也不是多重匹配,而是证明一个图是不是二部图. ...

最新文章

  1. BZOJ 3132 上帝造题的七分钟(二维树状数组)
  2. nginx防mysql注入_nginx防止sql注入
  3. protoc.exe java_protobuf——使用protoc.exe生成message文件
  4. java读取属性文件的方法_java读取属性文件的方法
  5. 通过scatter图寻找噪音
  6. Linux服务器与windows本地之间的数据同步
  7. [有奖励]GeneralUpdate开源项目招募开发者
  8. 使用 PowerShell 自动化 CloudServices 发布
  9. 的序号数据是什么_Excel技巧—一劳永逸制作自动更新序号
  10. esxi6.7封装nvme驱动
  11. 【python】CNN算法
  12. TMDb数据分析报告
  13. FPGA 入门 (一)
  14. PR软件下载Adobe Premiere Pro CC 2019安装教程
  15. 如何在safri查看网页源代码
  16. 好看的皮囊 · 也是大自然的杰作 · 全球高质量 · 美图 · 集中营 · 美女 · 2017-08-20期...
  17. opencv的逻辑运算bitwise详解
  18. C#几种读取文件的方式
  19. 重新思考人和计算机的关系
  20. 【Linux】Linux基础命令及英文全称

热门文章

  1. 关于DOS界面net start MySQL 启动失败的解决办法
  2. C#RichTextBox[自动选词]与[生僻字显示]问题
  3. php数字转换汉字,如何在php中将数字转换成汉字
  4. [数据库基础篇]——关系数据库
  5. Android安全』版优秀和精华帖分类索引
  6. 广东出台文件标准租借屋电费结算 下一年起履行
  7. 车辆派遣管理系统-查询统计
  8. MySQL查询数据后加上百分号%
  9. 交插二五条码(交叉25码)详解
  10. 下载JDK如何跳过登录