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. Springboot与任务整合(四)

    一 异步任务 启动类 @MapperScan("com.topcheer.*.*.dao") @SpringBootApplication @EnableCaching @Enab ...

  2. expect实现自动输入密码功能

    系统: Ubuntu:16.04 安装expect: sudo apt-get update sudo apt-get install expect 脚本实例: //这一行告诉操作系统脚本里的代码使用 ...

  3. 简要概括java技术体系

    以前一直在学java程序设计语言,学完了就以为自己已经把java学得差不多了,直到最近在看一本书<深入理解java虚拟机>,才发现自己以前学的只不过是冰山一角.相信很多小伙伴跟我一样,在没 ...

  4. Unity5-ABSystem(三):AssetBundle加载

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/lodypig/article/detai ...

  5. 在ASP.NET Core中编写合格的中间件

    这篇文章探讨了让不同的请求去使用不同的中间件,那么我们应该如何配置ASP.NET Core中间件?其实中间件只是在ASP.NET Core中处理Web请求的管道.所有ASP.NET Core应用程序至 ...

  6. margin:0 auto为何会居中?

    margin: 0 auto;为何会居中呢??? 一开始的学习html的时候,就是只知道块级元素margin:0 auto就能居中 但是后来就很好奇 margin: auto 0;为何不能垂直居中? ...

  7. DAY 4 基础算法

    基础算法 本来今天是要讲枚举暴力还有什么的,没想到老师就说句那种题目就猪国杀,还说只是难打,不是难.... STL(一)set 感觉今天讲了好多,set,单调栈,单调队列,单调栈和单调队列保证了序列的 ...

  8. 由浅入深——从ArrayList浅谈并发容器

    原创作品转载请附:https://www.cnblogs.com/superlsj/p/11655523.html 一.一个案例引发的思考 public class ArrayListTest { p ...

  9. 易初大数据 2019年11月8日 linux 王庆超

    ◆linux系统的特点: (1)完全免费. (2)高效.安全.稳定. (3)支持多种硬件平台. (4)友好的用户界面. (5)强大的网络功能. (6)支持多任务.多用户. ◆linux体系: 1.li ...

  10. node.js 需要注意知识点

    复习node.js 需要注意知识点--(重点) 2.1:参数传递获取造型 客户端脚手架(发)    (参数传递)    node.js(收) -发ajax  this.axios.get(" ...