Codeforces Round #360 (Div. 1)A (二分图&dfs染色)
题目链接:http://codeforces.com/problemset/problem/687/A
题意:给出一个n个点m条边的图,分别将每条边连接的两个点放到两个集合中,输出两个集合中的点,若不可能则输出-1;
思路:通过画图我们不难发现,图中没有出现长度为奇数的环则是可行的,反之则是不行的.
对于这点我们可以直接用dfs搜索+染色,对于当前标记为1的点,我们将其所有儿子标记为2, 对于当前标记为2的点,将其所有儿子标记为1,若出现某个节点的标记与其儿子相同,则有长度为奇数的环。
代码:
#include <bits/stdc++.h>
using namespace std; const int MAXN=1e5+;
vector<int> v[MAXN];
vector<int> st1, st2;
bool flag=false;
int vis[MAXN]; void dfs(int point){
if(flag){
return;
}
for(int i=; i<v[point].size(); i++){
int cnt=v[point][i];
if(vis[point]==vis[cnt]){
flag=true;
return;
}else if(!vis[cnt]){
if(vis[point]==){
vis[cnt]=;
st2.push_back(cnt);
dfs(cnt);
}else if(vis[point]==){
vis[cnt]=;
st1.push_back(cnt);
dfs(cnt);
}
}
}
} int main(void){
ios::sync_with_stdio(false), cin.tie(), cout.tie();
int n, m, x, y;
cin >> n >> m;
while(m--){
cin >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
}
for(int i=; i<=n; i++){
if(v[i].size()==){
continue;
}else if(!vis[i]){
vis[i]=;
st1.push_back(i);
dfs(i);
}
}
if(flag){
cout << - << endl;
}else{
cout << st1.size() << endl;
for(int i=; i<st1.size(); i++){
cout << st1[i] << " ";
}
cout << endl;
cout << st2.size() << endl;
for(int i=; i<st2.size(); i++){
cout << st2[i] << " ";
}
cout << endl;
}
return ;
}
Codeforces Round #360 (Div. 1)A (二分图&dfs染色)的更多相关文章
- Codeforces Round #360 (Div. 2)——C. NP-Hard Problem(BFS染色判二分图)
C. NP-Hard Problem time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces Round #360 (Div. 2) C. NP-Hard Problem 水题
C. NP-Hard Problem 题目连接: http://www.codeforces.com/contest/688/problem/C Description Recently, Pari ...
- Codeforces Round #548 (Div. 2) E 二分图匹配(新坑) or 网络流 + 反向处理
https://codeforces.com/contest/1139/problem/E 题意 有n个学生,m个社团,每个学生有一个\(p_i\)值,然后每个学生属于\(c_i\)社团, 有d天,每 ...
- Codeforces Round #222 (Div. 1) A. Maze dfs
A. Maze 题目连接: http://codeforces.com/contest/377/problem/A Description Pavel loves grid mazes. A grid ...
- Codeforces Round #245 (Div. 2) C. Xor-tree DFS
C. Xor-tree Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/430/problem/C ...
- Codeforces Round #383 (Div. 1) C(二分图)
一道很巧妙的二分图的题目 简单分析性质可知,一个合法序列一定是由12,21这样的子串构成的,所以相邻的每隔2个两两配对 然后BF和GF互相配对,思考一下,如果存在奇环,那么必定有一个BG有两个GF,或 ...
- Codeforces Round #459 (Div. 2) D. MADMAX DFS+博弈
D. MADMAX time limit per test 1 second memory limit per test 256 megabytes input standard input outp ...
- Codeforces Round #435 (Div. 2) B (二分图) C(构造)
B. Mahmoud and Ehab and the bipartiteness time limit per test 2 seconds memory limit per test 256 me ...
- Codeforces Round #398 (Div. 2) C. Garland —— DFS
题目链接:http://codeforces.com/contest/767/problem/C 题解:类似于提着一串葡萄,用剪刀剪两条藤,葡萄分成了三串.问怎样剪才能使三串葡萄的质量相等. 首先要做 ...
随机推荐
- 超限学习机 (Extreme Learning Machine, ELM) 学习笔记 (一)
1. ELM 是什么 ELM的个人理解: 单隐层的前馈人工神经网络,特别之处在于训练权值的算法: 在单隐层的前馈神经网络中,输入层到隐藏层的权值根据某种分布随机赋予,当我们有了输入层到隐藏层的权值之后 ...
- SpringBoot学习笔记(12):计划任务
SpringBoot学习笔记(12):计划任务 计划任务 在企业的实践生产中,可能需要使用一些定时任务,如月末.季末和年末需要统计各种各样的报表,每周自动备份数据等. 在Spring中使用定时任务 1 ...
- node版本管理工具 -- nvm安装与使用
新老项目维护时node环境切换麻烦怎么办? 不用担心,有了nvm ,一个命令就能切换node版本. 首先需要安装nvm工具,进入下载地址. 下载之后安装nvm. nvm安装之后还需要配置两个环境变量( ...
- hadoop —— MapReduce例子 (数据排序)
参考:http://eric-gcm.iteye.com/blog/1807468 file1.txt: 2 32 654 32 15 756 65223 file2.txt: 5956 22 650 ...
- 《机器学习实战》学习笔记第三章 —— 决策树之ID3、C4.5算法
主要内容: 一.决策树模型 二.信息与熵 三.信息增益与ID3算法 四.信息增益比与C4.5算法 五.决策树的剪枝 一.决策树模型 1.所谓决策树,就是根据实例的特征对实例进行划分的树形结构.其中有两 ...
- ss命令能识别的TCP状态的关键字
[TCP_ESTABLISHED] = "ESTAB", [TCP_SYN_SENT] = "SYN-SENT", [TCP_S ...
- html5--2.5新的布局元素(4)-aside/nav
html5--2.5新的布局元素(4)-aside/nav 学习要点 了解aside/nav元素的语义和用法 通过实例理解aside/nav元素的用法 aside元素(附属信息) aside元素通常用 ...
- 分享知识-快乐自己:SpringMvc整合遇到-前台传JSON参数,后台实体类对象接收
前台数据转JSON对象: /** * * @param $myFrom:from表单 * @returns {{}} */ function from($myFrom) { var ebookEntr ...
- matplotlib中文显示-微软雅黑
网上有很多方法,但是基本的是片面的. 参考1 https://tracholar.github.io/wiki/python/matplotlib-chinese-font.html 参考2 http ...
- 发现eclipse红叉,查看markers发现Target runtime Apache Tomcat v8.0 is not defined
导入以前的项目(Markers中注意查看,就在console选项卡旁边),报以下错误,但不影响操作: Faceted Project Problem Target runtime Apa ...