【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] 二分图匹配,匈牙利算法模板题; 这里我先把染 ...
随机推荐
- 简化MSI在WIN10的安装
这里给大家分享一个简化MSI安装的工具 InstallByDrag: 在win10系统中,通过双击方式打开 MSI 安装文件,可能被提示由于dll加载问题无法安装,这是由于没有使用管理员权限运行.而M ...
- set和map的简单用法
.set(集合)map(映射)都属于关联类容器 都支持查询一个元素是否存在并能够有效地获取元素. set集合的元素总是从小到大排列,set集合通过二分查找树实现.它具备以下两个特点: ①:独一无二的元 ...
- 如何写 JS 的链式调用 ---》JS 设计模式《----方法的链式调用
1.以$ 函数为例.通常返回一个HTML元素或一个元素集合. 代码如下: function $(){ var elements = []; ;i<arguments.length;i++){ v ...
- axure rp8.0 序列号,亲测可以用
转载自:https://zhidao.baidu.com/question/428326076480233092.html aaa 2GQrt5XHYY7SBK/4b22Gm4Dh8alaR0/0k3 ...
- PEtools
// PETools.cpp : Defines the entry point for the console application.// #include "stdafx.h" ...
- C语言 关于内存动态分配问题
全局变量:分配到 内存的静态区. 局部变量(非静态):分配到 内存的动态区.在存储区中称为栈(stack) 临时数据(C允许内存动态分配区域):存放在自由空间区,称为堆区(heap) 内存动态分配 得 ...
- 素数的平方阶群必为Abel群
定理 设$p$为素数,则$p^2$阶群$G$必为Abel群.
- 如何获取苹果手机的UDID
获取苹果手机的UDID有很多种,比如Xcode,iTunes等等吧,个人比较推荐使用iTunes,因为比较官方,而且苹果电脑自带的有,而且Windows也可以下载安装. 1.下载安装itunes(点击 ...
- javase-常用三种遍历方法
javase-常用三种遍历方法 import java.util.ArrayList; import java.util.Iterator; import java.util.List; public ...
- Flume(1)使用入门
一.概述: Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统. 当前Flume有两个版本Flume 0.9X版本的统称Flume-og,Flume1.X ...