PKU OJ A Bug's life
http://bailian.openjudge.cn/tm2018/G/
#include <iostream>
#include <vector>
#include <string>
using namespace std;
const int N = 2001;
bool flag = false;
//父亲节点
int Father[N];
// 要想与根节点之间的关系如何表示?可以用0表示与根节点同性别,
//用1表示与根节点是不同性别,可以用%2,来判断两只虫子的性别
//是不是相同,对2取余可以保证,用r[N]来表示N节点与根节点的关系
int r[N];
int Find(int x)
{
if (x == Father[x]) return x;
int temp = Father[x];
//如果不是根节点,那么把父节点继续拿去找根节点,然后令x的父节点直接为根节点
//为路径压缩
Father[x] = Find(Father[x]);
//更新x与父节点的关系
r[x] = (r[x] + r[temp]) % 2;
return Father[x];
} void Union(int x, int y)
{
auto fx = Find(x);
auto fy = Find(y);
if (fx == fy)
{
//如果2个节点的根节点相同,且性别也相同,那么是homesexual
if (r[x] == r[y])
{
flag = true;
return;
}
}
else
{
//如果不同,把fx合到fy的树里去
Father[fx] = fy;
//且改变fx节点与父节点的状态
r[fx] = (r[x] + r[y] + 1) % 2;
}
} int main()
{
int scenario;
cin >> scenario;
int cnt = 1;
while (scenario-- > 0)
{
int n, m;
cin >> n >> m;
//每次场景将flag重新重置为false
flag = false;
for (int i = 1; i <= n; i++)
{
Father[i] = i;
r[i] = 0;
}
vector<std::pair<int, int>> v;
for (int i = 0; i < m; i++)
{
int tempa, tempb;
cin >> tempa >> tempb;
v.emplace_back(tempa, tempb);
}
for (int i = 0; i < m; i++)
{
Union(v[i].first, v[i].second);
}
if (flag)
{
std::cout << "Scenario #" + to_string(cnt) + ":" << std::endl;
std::cout << "Suspicious bugs found!" << std::endl;
std::cout << std::endl;
}
else
{
std::cout << "Scenario #" + to_string(cnt) + ":" << std::endl;
std::cout << "No suspicious bugs found!" << std::endl;
std::cout << std::endl;
}
cnt++;
}
return 0;
}
并查集 请看:
https://www.cnblogs.com/xzxl/p/7226557.html
题解请看:
https://www.luogu.org/problemnew/solution/SP3377
PKU OJ A Bug's life的更多相关文章
- PKU OJ 1002 487-3279
PKU OJ 1002 487-3279 487-3279 Description Businesses like to have memorable telephone numbers. One w ...
- pku oj overhang叠加卡片求最少的卡片数
这个估计是里面第二简单的了,因为第一简单的是求a+b 哈哈,一submit就ac了 题目如下: Description How far can you make a stack of cards ov ...
- PKU OJ Exponentiation
ExponentiationTime Limit: 500MS Memory Limit: 10000KTotal Submissions: 155886 ...
- [转]论acm与泡妞
abstract :本文从各个方面讨论了泡妞与做题之间的相似之处与不同点,尽量的站在一个公平的角度阐述这一问题,所得的研究成果填补了国内外的理论空白. - 泡了一个好妞就好像做了一道难题一样快感都是相 ...
- 练习SQL代码
---------PS:但凡有聚合函数(where),必然后Group by,Group by后面跟having ---------面试题 SELECT name,sum(fen) as s from ...
- acm.njupt 1001-1026 简单题
点击可展开上面目录 Acm.njupt 1001-1026简单题 第一页许多是简单题,每题拿出来说说,没有必要,也说不了什么. 直接贴上AC的代码.初学者一题题做,看看别人的AC代码,寻找自己的问题. ...
- 2016.10.6初中部上午NOIP普及组比赛总结
2016.10.6初中部上午NOIP普及组比赛总结 中了病毒--病毒--病毒-- 进度: 比赛:AC+0+0+20=120 改题:AC+0+AC+20=220 Stairs 好--简--单!递推就过了 ...
- 刘汝佳黑书 pku等oj题目
原文地址:刘汝佳黑书 pku等oj题目[转]作者:小博博Mr 一.动态规划参考资料:刘汝佳<算法艺术与信息学竞赛><算法导论> 推荐题目:http://acm.pku.edu. ...
- PKU 百练OJ Arbitrage
http://bailian.openjudge.cn/practice/2240/ #include <iostream> #include <string> #includ ...
随机推荐
- Android开发 navigation入门详解
前言 Google 在2018年推出了 Android Jetpack,在Jetpack里有一种管理fragment的新架构模式,那就是navigation. 字面意思是导航,但是除了做APP引导页面 ...
- sslforfree的证书合并成类似于certbot的ssl证书文件
之前的證書都是通過 certbot的命令生成的,但是目前一個服務器太多個網站,太多個ssl證書,證書過期之後,目前是 通過 ssl for free 網站再生成新的 ssl證書,再次更新證書週期 Le ...
- php多维数组排序方案。按照姓名 首字符 等排序
//定义一个学生数组 $students = array( 256=>array('name'=>'jon','grade'=>98.5), 2=>arra ...
- Educational Codeforces Round 27 D. Driving Test
单调栈 题意看了半天... #include <cstdio> #include <cstdlib> #include <cmath> #include <c ...
- js--判断当前环境是否为app环境
/** *判断是否是app环境 */ function getIsApp () { var ua = navigator.userAgent.toLowerCase(); if (ua.match(/ ...
- javascript中onclick(this)用法和onclick(this.value)用法介绍
onclick(this.value)代码详解 <html> <head> <script language="javascript"> fun ...
- 依赖注入(DI)
Spring依赖注入(DI)的三种方式,分别为: 1. 接口注入 2. Setter 方法注入 3. 构造方法注入 依赖注入是一种思想,或者说是一种设计模式,在java中是通过反射机制实现,与具 ...
- ArrayList 和linkedList 插入比较
从学Java开始, 就一直大脑记着 arrayList 底层是数组 ,查询快, 插入慢, 有移动的动作.linkedList 底层链表, 插入快 查询慢,今天写了例子跑了跑, 果然. public ...
- 第二天:数值与字符串、列表list
数值 1. 声明变量 age = 20 f = 3.14 #浮点型 f = 0.3 f = .3 2.表达式 主要是做一些简单的加减乘除运算,直接出结果 1.1 + 2.2 2.2 + 3.0 3.1 ...
- C++开发系列-纯虚函数和抽象类
概念 纯虚函数和抽象类 纯虚函数是一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都实现该函数. 纯虚函数为各派生类提供了一个公共界面(接口的封装和设计.软件的模块功能的划分) 纯虚函数说明 ...