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的更多相关文章

  1. PKU OJ 1002 487-3279

    PKU OJ 1002 487-3279 487-3279 Description Businesses like to have memorable telephone numbers. One w ...

  2. pku oj overhang叠加卡片求最少的卡片数

    这个估计是里面第二简单的了,因为第一简单的是求a+b 哈哈,一submit就ac了 题目如下: Description How far can you make a stack of cards ov ...

  3. PKU OJ Exponentiation

    ExponentiationTime Limit: 500MS                      Memory Limit: 10000KTotal Submissions: 155886   ...

  4. [转]论acm与泡妞

    abstract :本文从各个方面讨论了泡妞与做题之间的相似之处与不同点,尽量的站在一个公平的角度阐述这一问题,所得的研究成果填补了国内外的理论空白. - 泡了一个好妞就好像做了一道难题一样快感都是相 ...

  5. 练习SQL代码

    ---------PS:但凡有聚合函数(where),必然后Group by,Group by后面跟having ---------面试题 SELECT name,sum(fen) as s from ...

  6. acm.njupt 1001-1026 简单题

    点击可展开上面目录 Acm.njupt 1001-1026简单题 第一页许多是简单题,每题拿出来说说,没有必要,也说不了什么. 直接贴上AC的代码.初学者一题题做,看看别人的AC代码,寻找自己的问题. ...

  7. 2016.10.6初中部上午NOIP普及组比赛总结

    2016.10.6初中部上午NOIP普及组比赛总结 中了病毒--病毒--病毒-- 进度: 比赛:AC+0+0+20=120 改题:AC+0+AC+20=220 Stairs 好--简--单!递推就过了 ...

  8. 刘汝佳黑书 pku等oj题目

    原文地址:刘汝佳黑书 pku等oj题目[转]作者:小博博Mr 一.动态规划参考资料:刘汝佳<算法艺术与信息学竞赛><算法导论> 推荐题目:http://acm.pku.edu. ...

  9. PKU 百练OJ Arbitrage

    http://bailian.openjudge.cn/practice/2240/ #include <iostream> #include <string> #includ ...

随机推荐

  1. list集合排序2

    java根据List内对象的属性排序 原创 2016年12月07日 00:20:01 标签: java / 对象 / sort / compare 2625 方法一:实现Comparator接口,并重 ...

  2. 深度探索C++对象模型之第一章:关于对象之对象的差异

    一.三种程序设计范式: C++程序设计模型支持三种程序设计范式(programming paradiams). 程序模型(procedural model) char boy[] = "cc ...

  3. pdfkit

    官方文档 0.准备 需要引入两个包,首先要npm install pdfkit安装pdfkit包 const PDF = require('pdfkit'); const fs = require(' ...

  4. Java中的常量池

    JVM中有: Class文件常量池.运行时常量池.全局字符串常量池.基本类型包装类对象 常量池 Class文件常量池: class文件是一组以字节为单位的二进制数据流,在java代码的编译期间,编写的 ...

  5. php 垃圾回收机制 转载

    PHP的基本GC概念PHP语言同其他语言一样,具有垃圾回收机制.那么今天我们要为大家讲解的内容就是关于PHP垃圾回收机制的相关问题.希望对大家有所帮助.PHP strtotime应用经验之谈PHP m ...

  6. window.location 对象中各种方法的用途

    一.简介 属性 描述 hash 从井号 (#) 开始的 URL(锚) host 主机名和当前 URL 的端口号 hostname 当前 URL 的主机名 href 完整的 URL pathname 当 ...

  7. jquery学习笔记(三):事件和应用

    内容来自[汇智网]jquery学习课程 3.1 页面加载事件 在jQuery中页面加载事件是ready().ready()事件类似于就JavaScript中的onLoad()事件,但前者只要页面的DO ...

  8. System.Web.Mvc.JavaScriptResult.cs

    ylbtech-System.Web.Mvc.JavaScriptResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, P ...

  9. http://edu.manew.com/ ,蛮牛教育(很少免费),主要是unty3D和大数据方向。适合扫盲

    http://edu.manew.com/ ,蛮牛教育(很少免费),主要是unty3D和大数据方向.

  10. VM 虚拟机使用桥接模式却连不上网的解决办法(转载)

    只需将VM的虚拟网络编辑器中关于 VMnet0 的设置改一下就行了: 1.进入VMware的 编辑 -> 虚拟网络编辑器. 第一步 2.选择更改设置. 3.将VMnet0(或其它类型为桥接模式的 ...