poj 2492 A Bug's Life
文章的意思不解释了,就是一个并查集,不过要判断下和根节点是否为同一个性别。
r[50000]; 0代表同性,1代表异性,本身与本身自然的同性
按路径压缩的并查集,一般情况下 只有2层
r[x]=(r[temp]==0?r[x]:1-r[x]); r[temp]=0 表示r[x]的 父亲节点与根节点 具有同性别那自然就不用改变r[x]
r[rb]=(r[a]==r[b]?1:0); 写下就观察出来了
写了我好久真是郁闷。
如有不对,或者其他什么建议 请指出 ,谢谢。
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int root[50000],r[50000]; // 0代表同性,1代表异性,本身与本身自然的同性
int n,m;
void init()
{int i;for(i=1;i<=n;i++){root[i]=i;r[i]=0;}
}
int find(int x)
{int temp=root[x];if(x==root[x]) return x;else{root[x]=find(root[x]);r[x]=(r[temp]==0?r[x]:1-r[x]);return root[x];}
}
void Union(int a,int b,int ra,int rb)
{root[rb]=ra;r[rb]=(r[a]==r[b]?1:0);
}
int main()
{int t;scanf("%d",&t);for(int number=1;number<=t;number++){printf("Scenario #%d:\n",number);scanf("%d%d",&n,&m);init();int a,b,i;int flag=0;for(i=1;i<=m;i++){scanf("%d%d",&a,&b);if(flag==0){int ra=find(a);int rb=find(b);if(ra==rb&&r[a]==r[b])flag=1;else Union(a,b,ra,rb);}}if(flag==1) printf("Suspicious bugs found!\n");else printf("No suspicious bugs found!\n");printf("\n");}
}
poj 2492 A Bug's Life相关推荐
- POJ 2492 A Bug's Life (带权并查集 向量偏移)
题意 : 给你 n 只虫且性别只有公母, 接下来给出 m 个关系, 这 m 个关系中都是代表这两只虫能够交配, 就是默认异性, 问你在给出的关系中有没有与异性交配这一事实相反的, 即同性之间给出了交配 ...
- POJ 2492 A Bug's Life 带权并查集
题意: 思路: mod2 意义下的带权并查集 如果两只虫子是异性恋,它们的距离应该是1. 如果两只虫子相恋且距离为零,则它们是同性恋. (出题人好猥琐啊) 注意: 不能输入一半就break出来.... ...
- A Bug‘s Life POJ 2492 加权并查集
A Bug's Life POJ 2492 加权并查集 传送门:http://poj.org/problem?id=2492 Description Background Professor Hopp ...
- POJ - 2492 种类并查集
思路:保存每个点与其父节点的关系,注意合并和路径压缩即可. AC代码 #include <cstdio> #include <cmath> #include <cctyp ...
- POJ 2492 并查集,带权或带偏移量并查集 【例题详解】
分析这道题,我们可以得出,假如a,b,c三只虫子,a和b可以交配,b和c也可以交配,那么a和c一定是同行,因为他们和同一个异性交配了.所以我们可以把关系抽象成图,在ab之间,bc之间各连一条线长度为1 ...
- POJ 1703 Find them, Catch them(并查集高级应用)
POJ 1703 Find them, Catch them(并查集高级应用) 手动博客搬家:本文发表于20170805 21:25:49, 原地址https://blog.csdn.net/sunc ...
- kuangbin带你飞专题合集
题目列表 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶 [kuangbin带你飞]专题三 Dancing Links [kuangbin带你飞]专题四 最短路 ...
- 算法学习经典例题整理
陆续会对本篇博客进行更新! 搜索:https://vjudge.net/contest/292597 区间DP:https://vjudge.net/contest/293892 树状背包:https ...
- 并查集入门+初级专题训练
介绍 摘自罗勇军,郭卫斌的<算法竞赛入门到进阶>上的说明: 并查集(Disjoint Set)是一种非常精巧而且食用的数据结构,它主要用于处理一些不相交集合的合并问题.经典的例子有 ...
最新文章
- python怎么学好-怎么短时间学好python
- 后台开发人员面试内容——数据库(二)
- VTK:参数化超椭球用法实战
- Web前端开发笔记——第三章 CSS语言 第六节 CSS定位
- 数学沉思录:古今数学思想的发展与演变 (Mario Livio 著)
- MapReduce经典案例——统计单词数
- postgresql 字符串转整数 int、integer
- ABySS非root权限安装
- 农用圆形打捆机行业调研报告 - 市场现状分析与发展前景预测
- python程序员月薪-据说做Python程序员,都月薪上万?
- image 搜索docker_docker images命令-列出image
- Java实现的各种排序算法
- C++ Primer 5th - 1.1 编写一个简单的C++程序
- 基于C++实现家谱管理系统
- FPGA学习积累之AM调制解调(解调部分没搞太明白)
- python推箱子小游戏_python实现推箱子游戏
- 2022.8.11SAP目前为止学习总结
- vue 仿外卖app-数据mock部分
- 记录一款绿色便携的sqlist3数据库编辑工具SQLiteSpy
- 教你用Python画了一棵圣诞树