传送门:Find them, Catch them

题意警察抓获N个罪犯,这些罪犯只可能属于两个团伙中的一个,现在给出M个条件(D a b表示a和b不在同一团伙),对于每一个询问(A a b)确定a,b是不是属于同一团伙或者不能确定。

思路:如果父亲和孩子是同一个团伙,那么孩子标记为0,如果不是的话,孩子标记为1,然后就是种类并查集的事情。

  • 种类并查集
  • 判断在不同的集合
  • 以前接触的并查集都是让我们判断是否属于同一个连通分量,但这道题却让你判断是否属于同一类

r[x]:x所属的类

具体解释

点击1

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std; const int maxn = 100005;
int n,m;
int a,b,ans;
int pre[maxn]; //存父亲节点
int r[maxn]; //存与根节点的关系,0 代表同类, 1代表不同类
//r[i]=1 表示结点i与根结点属于一类
void init()
{
for(int i=1;i<=n;i++){
pre[i] = i; //自己是自己的父亲
r[i] = 0; //自己与自己是同一类
}
} int find(int x)
{
if(x == pre[x]) return x; int t = pre[x]; //记录父亲节点,方便下面更新r[]
pre[x] = find(t);
r[x] = (r[x]+r[t])%2; //根据子节点与父亲节点的关系和父节点与爷爷节点的关系,推导子节点与爷爷节点的关系
return pre[x];
} void unite(int x,int y)
{
int rx = find(x);
int ry = find(y);
if(rx != ry){
pre[rx] = ry; //合并
r[rx] = (r[x]+1-r[y])%2; //fx与x关系 + x与y的关系 - y与fy的关系 = fx与fy的关系
}
} int main()
{
int T;
cin>>T;
while(T--){
scanf("%d%d",&n,&m);
init();
int flag=0;
while(m--){
char str[10];
scanf("%s%d%d",str,&a,&b);
if(str[0] == 'A'){
//如果根节点相同,则表示能判断关系
if(find(a)==find(b)){
if(r[a] == r[b])
cout<<"In the same gang.\n";
else
cout<<"In different gangs.\n";
}
else{
cout<<"Not sure yet.\n";
}
}
if(str[0] == 'D'){
unite(a,b);
}
}
}
return 0;
}

并查集——poj1703(带权并查集入门)的更多相关文章

  1. POJ1703带权并查集(距离或者异或)

    题意:       有两个黑社会帮派,有n个人,他们肯定属于两个帮派中的一个,然后有两种操作 1 D a b 给出a b 两个人不属于同一个帮派 2 A a b 问a b 两个人关系 输出 同一个帮派 ...

  2. BZOJ4025 二分图 分治 并查集 二分图 带权并查集按秩合并

    原文链接http://www.cnblogs.com/zhouzhendong/p/8683831.html 题目传送门 - BZOJ4025 题意 有$n$个点,有$m$条边.有$T$个时间段.其中 ...

  3. 并查集模板 && 带权并查集模板

    不带权: ]; void init(void) { ;i<=n;i++) f[i]=i; } int fd(int x) { return f[x]==x?x:fd[x]=fd(f[x]); } ...

  4. 浅谈并查集&种类并查集&带权并查集

    并查集&种类并查集&带权并查集 前言: 因为是学习记录,所以知识讲解+例题推荐+练习题解都是放在一起的qvq 目录 并查集基础知识 并查集基础题目 种类并查集知识 种类并查集题目 并查 ...

  5. poj2492 A Bug's Life(带权并查集)

    题目链接 http://poj.org/problem?id=2492 题意 虫子有两种性别,有n只虫子,编号1~n,输入m组数据,每组数据包含a.b两只虫子,表示a.b为不同性别的虫子,根据输入的m ...

  6. POJ 1703 Find them, Catch them(带权并查集)

    传送门 Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 42463   Accep ...

  7. [NOIP摸你赛]Hzwer的陨石(带权并查集)

    题目描述: 经过不懈的努力,Hzwer召唤了很多陨石.已知Hzwer的地图上共有n个区域,且一开始的时候第i个陨石掉在了第i个区域.有电力喷射背包的ndsf很自豪,他认为搬陨石很容易,所以他将一些区域 ...

  8. poj1417 带权并查集 + 背包 + 记录路径

    True Liars Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2713   Accepted: 868 Descrip ...

  9. poj1984 带权并查集(向量处理)

    Navigation Nightmare Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 5939   Accepted: 2 ...

  10. 【BZOJ-4690】Never Wait For Weights 带权并查集

    4690: Never Wait for Weights Time Limit: 15 Sec  Memory Limit: 256 MBSubmit: 88  Solved: 41[Submit][ ...

随机推荐

  1. ## `nrm`的安装使用

    作用:提供了一些最常用的NPM包镜像地址,能够让我们快速的切换安装包时候的服务器地址:什么是镜像:原来包刚一开始是只存在于国外的NPM服务器,但是由于网络原因,经常访问不到,这时候,我们可以在国内,创 ...

  2. Oracle 11g RAC小结

    1.查看数据库所有实例与状态 unixdev$[/home/grid]srvctl status database -d unixdev Instance unixdev11 is running o ...

  3. C# sqlhelp

    public class SqlHelp { //数据库连接字符串 public static string connectionString = ConfigurationManager.Conne ...

  4. Swift_数组详解

    Swift_数组详解 点击查看源码 初始化 //初始化 fileprivate func testInit() { //空数组 var array = [Int]() print(array) arr ...

  5. plupload批量上传分片(后台代码)

    plupload批量上传分片功能, 对于文件比较大的情况下,plupload支持分片上传,后台代码如下: /** * * 方法:upLoadSpecialProgramPictrue * 方法说明:本 ...

  6. EF core Code First 简单的使用方法

    好吧,我又回来了,其实一直都想写一篇关于EF core 的文章去记录自己在开发时候遇到的问题. 为什么要使用EF框架呢,因为原始的ADO.NET需要编写大量的数据访问代码,所以使用EF会更方便.但是今 ...

  7. Percona-Tookit工具包之pt-show-grants

      Preface       User privileges regulation is pretty important in DBAs routine job.As we all know,it ...

  8. rabbitMq install for windows

    1.下载,erlang 安装rabbitmq需要erlang,下载erlang:http://www.erlang.org/downloads 2.下载rabbitMq rabbitMQ安装,查看安装 ...

  9. ansible服务的部署与使用

      简介:   ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序 ...

  10. 解决 Android sdk content loader 0%

    第一次遇到这种情况,真的很头痛,没办法 ,是问题就要解决,在网上找了一些方法,归纳了下来. 方法一(关闭后重启): 遇到Eclipse右下角一直显示“Android sdk content loade ...