【hihoCoder】1121:二分图一·二分图判定
题目 http://hihocoder.com/problemset/problem/1121
无向图上有N个点,两两之间可以有连线,共有M条连线。
如果对所有点进行涂色(白/黑),判定是否存在一个合理的涂色方案,使得图上每一条连线两端的顶点颜色都不相同。
思路
1. 深度优先搜索:把图上所有的点都遍历一遍
代码注意点
1. 因为不想用二维数组,采用vector<vector<int>>的类型。这时要注意初始化方式:
不该用的方式
//1. 初始化
vector<int> tmp(N);
vector<vector<int>> data(N, tmp);
//2. 访问方式
cin>>data[i][j]
合适的方式
//1. 初始化
vector<vector<int>> data;
data.resize(N);
//2. 访问方式
int x, y;
cin>>x>>y;
data[x].push_back(y);
data[y].push_back(x);
2. vector的resize/reserve函数
1) void reserve (size_type n);
- 预分配存储区大小,即capacity,但是没有对内存初始化,不能有效地访问
- 实际分配的大小可能大于n,即capacity >= n
2) void resize (size_type n, value_type val = 0);
- 重新分配大小,vector中现有的元素个数 size()
- n <= 原始大小,则减少size()值,保存前n个元素
- n >= 原始大小,则插入元素(默认为0, 或设置的 val),使size()达到n
- n > capacity(),则重新分配存储空间
源码
#include <iostream>
#include <vector>
using namespace std; bool setPeople(vector<vector<int>>& date, vector<int>& people, int index)
{
int num = date[index].size();
for (int i = ; i < num; i++)
{
int j = date[index][i];
if (people[j] == )//还没有设置过
{
people[j] = -people[index];
if (!setPeople(date, people, j))
return false;
}
else if (people[j] == people[index])//已经设置过, 不符合要求
return false;
}
return true;
}
int main()
{
int T, N, M, i;//N个人,M对
cin >> T;
vector<int> people;//0: 没有设置,1:红色 2:黑色
vector<vector<int>> date;
while (T-- > )
{
cin >> N >> M;
people.clear();
date.clear();
people.resize(N + , );
date.resize(N + ); for (i = ; i < M; i++)
{
int a, b;
cin >> a >> b;
date[a].push_back(b);
date[b].push_back(a);
}
for (i = ; i <= N; i++)
{
if (people[i] == )//没有设置过
{
people[i] = -;
if (!setPeople(date, people, i))//有出现错误
break;
}
}
if (i != N + )
cout << "Wrong" << endl;
else
cout << "Correct" << endl;
}
return ;
}
【hihoCoder】1121:二分图一·二分图判定的更多相关文章
- HihoCoder 1121 二分图一•二分图判定
二分图一•二分图判定 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大家好,我是小Hi和小Ho的小伙伴Nettle,从这个星期开始由我来完成我们的Weekly. 新年回 ...
- hihoCoder #1127 : 二分图二·二分图最小点覆盖和最大独立集
#1127 : 二分图二·二分图最小点覆盖和最大独立集 Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB 描述 在上次安排完相亲 ...
- HihoCoder1127 二分图三·二分图最小点覆盖和最大独立集
二分图三·二分图最小点覆盖和最大独立集 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上次安排完相亲之后又过了挺长时间,大家好像都差不多见过面了.不过相亲这个事不是说 ...
- HihoCoder 1121二分图一•二分图判定
背景: 个名字,表示这两个人有一场相亲.由于姑姑年龄比较大了记性不是太好,加上相亲的人很多,所以姑姑一时也想不起来其中有些人的性别.因此她拜托我检查一下相亲表里面有没有错误的记录,即是否把两个同性安排 ...
- hihoCoder#1121(二分图判定)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大家好,我是小Hi和小Ho的小伙伴Nettle,从这个星期开始由我来完成我们的Weekly. 新年回家,又到了一年一度大龄 ...
- Hihocoder #1121 二分图一•二分图判定( bfs或者dfs搜索实现 搜索的过程中进行 节点标记 *【模板】)
对于拿到的相亲情况表,我们不妨将其转化成一个图.将每一个人作为一个点(编号1..N),若两个人之间有一场相亲,则在对应的点之间连接一条无向边.(如下图) 因为相亲总是在男女之间进行的,所以每一条边的两 ...
- hihoCoder 1393 网络流三·二分图多重匹配(Dinic求二分图最大多重匹配)
#1393 : 网络流三·二分图多重匹配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小H ...
- 【POJ】1486:Sorting Slides【二分图关键边判定】
Sorting Slides Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5390 Accepted: 2095 De ...
- 【hihocoder 1122】二分图二•二分图最大匹配之匈牙利算法
[Link]:https://hihocoder.com/problemset/problem/1122 [Description] [Solution] 二分图匹配,匈牙利算法模板题; 这里我先把染 ...
随机推荐
- Angular2 表单
1. 说明 表单是Web程序中的重要组成部分,构建良好以及实用的表单必须解决如下几个问题: (1). 如何跟踪及更新表单的数据状态 (2). 如何进行表单验证 (3). 如何显示表单验证信息 Angu ...
- html的a标签display:block之后文字竖直居中
设置行高和a标签的高度一样就能居中,使用line-height
- Python: 处理mongodb文档,怎么让UTC时间转换为本地时间?
存储数据到MongoDB数据库时,一般我们会加一个更新数据的时间update_time.这时在python代码中 会用到datetime模块以便获取当前系统时间,但是存入到MongoDB数据库时,存储 ...
- ecshop不同文章分类调用不同文章分类模板
根据需要,不同的文章分类会有不一样的页面风格.也就是说根据文章分类ID来判断,输出不同的文章分类模板. 重点就是文章分类的ID. 打开:article_cat.php $smarty->disp ...
- gulp学习-gulpfile
安装gulp 假设已经安装了node 和npm (淘宝的cnpm很适合国内使用). 1.首页全局安装gulp. 1 npm install --global gulp 2.其次局部安装gulp.(注: ...
- JavaScript 操作 Cookie
转自作者:聂微东出处:http://www.cnblogs.com/Darren_code/ 什么是 Cookie “cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器 ...
- 数据复制与AA双活(1)
最开始有些概念需要弄明白: 1. 什么是RPO? Wiki: https://en.wikipedia.org/wiki/Recovery_point_objective A recovery poi ...
- Mac 下locate命令使用问题WARNING: The locate database (/var/db/locate.database) does not exist.
想在Mac下使用locate时,提醒数据库没创建: WARNING: The locate database (/var/db/locate.database) does not exist. To ...
- html表单提交方式
xml 表单提交方式: * 使用submit提交 <form> 要提交的数据 <input type="submit" /'> </form> ...
- curl的用法以及个人理解(php)
php curl的个人理解 1.首先curl的官方解释为:curl是利用URL语法在命令行方式下工作的开源文件传输工具.{它只是一种传输工具!} 2.curl就是抓取网页的升级版本,支持POST.GE ...