Luogu P1892

Luogu P2024

这两道一眼看过去很容易发现可以用并查集来做——但是当我们仔细阅读题面后,会发现其实并没有那么简单。

我们知道并查集可以很轻松地维护具有传递性的信息,也就是“朋友的朋友就是我的朋友”这样的关系,但是普通的并查集并不能维护“敌人的敌人是朋友”这种关系。

这时候我们就要引入一种神奇的操作,将并查集扩大一倍,将增加的这一倍空间来维护节点i的敌人。

例如对于团伙这一题

	if (c=='F')
{
merge(x,y);
}
else
{
merge(x,y+n);
merge(y,x+n);
//x+n代表的是x的敌人集合
}

非常好理解,确实是一种相当高效的操作。

P1892完整代码

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=2001;
int fa[maxn],n,m,cnt,x,y;
int getf(int v)
{
if (fa[v]==v) return fa[v];
return fa[v]=getf(fa[v]);
}
inline void merge(int x,int y)
{
fa[getf(y)]=getf(x);
}
inline bool check(int x,int y)
{
if (getf(x)==getf(y)) return true;
return false;
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=2*n;i++) fa[i]=i;
for (int i=1;i<=m;i++)
{
char c;
scanf("\n%c %d %d",&c,&x,&y);
if (c=='F')
{
merge(x,y);
//merge(x+n,y+n);
//注意上面这句不能要,因为题目中没有说到朋友的敌人也是我的敌人。
}
else
{
merge(x,y+n);
merge(y,x+n);
}
}
for (int i=1;i<=n;i++) fa[i]=getf(i);//路径压缩,防止压缩不完全
for (int i=1;i<=n;i++) if (fa[i]==i) cnt++;
printf("%d\n",cnt);
return 0;
}

P2024完整代码

#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=3*5*1e4+10;
int fa[maxn],cnt,n,k,flag,x,y;
int getf(int v)
{
if (fa[v]==v) return v;
return fa[v]=getf(fa[v]);
}
inline void merge(int x,int y)
{
x=getf(x);
y=getf(y);
fa[x]=y;
}
inline bool check(int x,int y)
{
x=getf(x);
y=getf(y);
if (fa[x]==fa[y]) return true;
return false;
}
int main()
{
scanf("%d%d",&n,&k);
for (int i=1;i<=3*n;i++)
fa[i]=i;
//i+n是i吃的集合,i+2n是吃i的集合
for (int i=1;i<=k;i++)
{
scanf("%d%d%d",&flag,&x,&y);
if (x>n||y>n) {cnt++;continue;}
if (flag==1)
{
if (check(x+n,y)) {cnt++;continue;}
if (check(x+2*n,y)) {cnt++;continue;}
merge(x,y);
merge(x+n,y+n);
merge(x+2*n,y+2*n);
}
if (flag==2)
{
if (check(x,y)) {cnt++;continue;}
if (check(y+n,x)) {cnt++;continue;}
merge(x+n,y);
merge(y+2*n,x);
merge(x+2*n,y+n);
}
}
printf("%d\n",cnt);
return 0;
}

【Luogu P2024&P1892】食物链&团伙(并查集拓展域)的更多相关文章

  1. [NOI2001]食物链(并查集拓展域)&& [HAOI2006]旅行(Kruskal)

    题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种,但是我 ...

  2. P2024 [NOI2001]食物链(种类并查集)

    题目链接: https://www.luogu.org/problemnew/show/P2024 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 ...

  3. 【题解】P2024 [NOI2001]食物链 - 数据结构 - 并查集

    P2024 [NOI2001]食物链 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 动物王国中有三类动物 \(A,B ...

  4. 洛谷 P2024 [NOI2001]食物链 (并查集)

    嗯... 题目链接:https://www.luogu.org/problemnew/show/P2024 这道题和团伙这道题的思想比较类似,都是一个数组分成几个集合,但这道题的思路更加混乱,建议没做 ...

  5. P1892 [BOI2003]团伙 并查集

    题目描述 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么是敌人.而且有一点是肯定的,就是: 我朋友的朋友是我的朋友: 我敌人的敌人也是我的朋友. 两个强盗是同一团伙的 ...

  6. P2024 [NOI2001]食物链[扩展域并查集]

    大水题一道啊,几分钟切掉. 还是扩展域,每个点拆3个点,之间连边表示有关系(即捕食关系).然后随便判定一下就好了,不难,毕竟NOI上古题目. #include<iostream> #inc ...

  7. POJ 1703 Find them, Catch them(并查集拓展)

    Description The police office in Tadu City decides to say ends to the chaos, as launch actions to ro ...

  8. Luogu P2024 [NOI2001]食物链 | 并查集

    题目链接 思路:并查集,因为一开始我们并不知道每一只动物是哪一个种类的,所以我们干脆建立三倍于n的空间,1~n这三分之一用来存第i只动物是A的情况,n+1~2n这三分之一用来存第(i-n)只动物是B的 ...

  9. BZOJ 1370: [Baltic2003]Gang团伙(luogu 1892)(种类并查集)

    题面: bzoj题面有误,还是看luogu的吧 https://www.luogu.org/problemnew/show/P1892 题解: 种类并查集.. 因为有敌人的敌人是朋友这个条件,所以需要 ...

随机推荐

  1. 基于Spring Boot的问答系统之一:elasticsearch 7.2的hello world入门

    好久没有写代码了,最近想做一个基于spring boot + vue + elasticsearch + NLP(语义相关性)的小系统练练手,系统后面可以成为一个聊天机器人,客服系统的原型等等. 所以 ...

  2. 编程语言分类 + python解释器的安装 + jupyter的使用(day 02整理)

    目录 一.昨日内容回顾 一 计算机基础之编程 (一) 什么是编程语言 (二) 什么是编程 (三) 为什么编程 二 计算机组成 (一) CPU (二) 存储器 (三) I/O设备 (四) 多核CPU ( ...

  3. vue-cli3没有config文件解决方案,在根目录加上vue.config.js文件

    module.exports = { /** 区分打包环境与开发环境 * process.env.NODE_ENV==='production' (打包环境) * process.env.NODE_E ...

  4. jvm虚拟机栈的作用

    jvm虚拟机栈的作用 jvm虚拟机栈栈帧的组成 jvm虚拟机栈,也叫java栈,它由一个个的栈帧组成,而栈帖由以下几个部分组成 局部变量表-存储方法参数,内部使用的变量 操作数栈-在变量进行存储时,需 ...

  5. Java基本数据类型的传值

    传递值: 说明:标题其实说法是错误的.Java中只有值传递,没有引用传递. ... ... //定义了一个改变参数值的函数 public static void changeValue(int x) ...

  6. win+L键失灵了怎么办?

    win+L组合键是比较常用的锁屏快捷键组合,一直用的好好的今天发现突然失灵. 百度大部分方法是改注册表的值,然而对我来说没有用. 最后,才搜到一个帖子说是 win键被锁住了. [解决方法]: Fn+w ...

  7. git命令--subtree

    目录 git命令--subtree subtree 主要命令 git subtree add   --prefix=<prefix> <commit> git subtree ...

  8. vue proxyTable代理 解决开发环境的跨域问题

    如果我们项目请求的地址为 htttp://xxxx.com/a/b/c 可以设置代理为: dev:{ assetsSubDirectory: 'static',// 静态资源文件夹 assetsPub ...

  9. curl太复杂难用记不住?来试试Httpie一个简单的现代化命令行Http客户端

    HTTPie 是一个简单的现代化命令行 HTTP 客户端. 交互友好,JSON支持,语法高亮,类wget下载,支持拓展等 功能特性 自然而且简单的命令语句 格式化且高亮显示输出内容 内置 JSON 支 ...

  10. 『题解』洛谷P5436 【XR-2】缘分

    Problem Portal Portal1:Luogu Description 一禅希望知道他和师父之间的缘分大小.可是如何才能知道呢? 一禅想了个办法,他先和师父约定一个正整数\(n\),接着他们 ...