ural 1106. Two Teams
2015-08-20 11:24
204 查看
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1106
题目描述:给定N个人中,每个人至少跟其它1个人是朋友,问你能否将这N个人分成两队,其中每一队里每个人都有朋友在对面队伍里面;
貌似会遇到那种跟题意违背的一个朋友都没有的人,这应该是个坑,所以需要判断一下;
思路就是边visit边分组,遍历每个点,若这个点之前没有visit过,放1组,将与它有关系的点标记visit后放第二组;
直接上AC代码:
题目描述:给定N个人中,每个人至少跟其它1个人是朋友,问你能否将这N个人分成两队,其中每一队里每个人都有朋友在对面队伍里面;
貌似会遇到那种跟题意违背的一个朋友都没有的人,这应该是个坑,所以需要判断一下;
思路就是边visit边分组,遍历每个点,若这个点之前没有visit过,放1组,将与它有关系的点标记visit后放第二组;
直接上AC代码:
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <stdio.h> #include <string> #include <vector> #include <queue> #include <map> using namespace std; const int m_Size = 110; bool matrix[m_Size][m_Size]; vector<bool>visited; vector<int> ans; void func(){ int i, j, N; bool noAns = false; cin >> N; ans.clear(); visited.resize(N + 1, false); for (i = 1; i <= N;i++) for (j = 1; j <= N; j++) matrix[i][j] = false; for (i = 1; i <= N; i++){ while (cin >> j&&j)matrix[i][j] = true; } for (i = 1; i <= N; i++){ if (!visited[i]){ visited[i] = true; bool relation = false; for (j = 1; j <= N;j++) if (matrix[i][j]){ visited[j] = true; relation = true; } if (relation)ans.push_back(i); else{ noAns = true; break; } } } if (noAns)cout << "0\n"; else{ cout << ans.size() << endl << ans[0]; for (i = 1; i < ans.size(); i++) cout << ' ' << ans[i]; cout << endl; } } int main(){ freopen("out.txt", "w", stdout); freopen("in.txt", "r", stdin); func(); }
相关文章推荐
- 集训第六周 数学概念与方法 J题 数论,质因数分解
- sed 中带变量的情况
- js,addEventListener参数传递
- textarea长度限制
- mt7601移植到海思3518
- 工作中的程序员如何进阶
- 深入Objective-C的动态特性
- Eclipse中安装Birt插件及基础教程
- ISP模块之RAW DATA去噪(二)--BM3D算法
- Javascript(一)-16-(JS函数_细节2)
- TCP的四层结构及每一层的功能
- Nagios:企业级系统监控方案
- Android studio相关设置及实现存在于工程目录中的视频播放
- leetcode - Unique Binary Search Trees
- 火狐浏览器(Firefox)打开EBS form的设置方法
- ajax 设置Access-Control-Allow-Origin实现跨域访问
- Git简介
- 零java基础搞定微信Server
- iOS企业证书申请
- Javascript(一)-15-(JS函数_细节1)