[Luogu 2024] 食物链

<题目链接>


几句随感

我依稀记得联赛前本来想做这题的时候。

当年啊弱到题目与标签就令我望而生畏。

还有翻阅很多遍那现在已经被遗弃的博客。

看到题解中「三倍数组」的字眼就怕难而放弃。

如今我来了,晚了太多。

只可惜,总有的步伐是我留不住的。

也许我会说「其实你的写法可以更简单」。

也许我会说「判断条件可以不用那么多的」。

也许我会说「那句 continue 完全可以删除」。

也许,「不是你想 A 就能 A 的」。

也许,「可是该退还是要退的」。

……


题解

以后并查集杜绝 Merge,一律 Union。

建立补集。并查集分三段,每段长为 n,分别表示 A B C。说白了就是 f 数组开三倍,\([1,n],[n+1,2n],[2n+1,3n]\) 分别表示 A B C。

越界肯定是假的,跳过。

如果 x,y 同类,但这俩已经有捕食关系,这句话就是假的。

如果 x 吃 y,但这俩已经是同类或者 y 已经吃 x,这句话就是假的。

否则,这句话就是真的,那么执行下列操作。

x,y 是同类,分别在 A B C 段内 Union(x,y)。

x 吃 y,A->y 连 B->x,B->y 连 C->x,C->y 连 A->x。(当然 x 吃 y 写成 x 连 y 也是可以的,但鉴于本人刚学了生态系统的能量流动,就按生物的标准写了qwq)

最后输出假话数目就好了。

#include <cstdio>
const int MAXN=50010;
int n,k,ans;
class UFS
{
private:
int f[MAXN*3];
int Find(int x)
{
return x==f[x] ? x : f[x]=Find(f[x]);
}
void Union(int x,int y)
{
f[Find(y)]=Find(x);
}
public:
UFS(int n)
{
for(int i=1;i<=n*3;++i)
f[i]=i;
}
void UnionSame(int x,int y)
{
Union(x,y);
Union(x+n,y+n);
Union(x+(n<<1),y+(n<<1));
}
void UnionEat(int x,int y)
{
Union(x+n,y);
Union(x+(n<<1),y+n);
Union(x,y+(n<<1));
}
bool Connected(int x,int y)
{
return Find(x)==Find(y);
}
};
int main(int argc,char** argv)
{
scanf("%d %d",&n,&k);
static UFS *S=new UFS(n);
for(int i=1,opt,x,y;i<=k;++i)
{
scanf("%d %d %d",&opt,&x,&y);
if(x>n || y>n)
{
++ans;
continue;
}
if(opt==1)
if(S->Connected(x,y+n) || S->Connected(x+n,y))
++ans;
else
S->UnionSame(x,y);
else
if(S->Connected(x,y) || S->Connected(x,y+n))
++ans;
else
S->UnionEat(x,y);
}
printf("%d\n",ans);
delete S;
return 0;
}

谢谢阅读。

[Luogu 2024] 食物链的更多相关文章

  1. 【luogu P2024 食物链】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2024 摘吊打集训队的九日dalao一句话 关于带有多个相对集合的全集,我们可以多开几倍的空间.每一倍的元素表 ...

  2. luogu P2024 食物链

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

  3. 【洛谷】P1892 团伙(并查集)+ 求助

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

  4. 【luogu P4017 最大食物链计数】 题解

    题目链接:https://www.luogu.org/problemnew/show/P4017 DAG + DP #include <queue> #include <cstdio ...

  5. 【Luogu P2024&P1892】食物链&团伙(并查集拓展域)

    Luogu P1892 Luogu P2024 这两道一眼看过去很容易发现可以用并查集来做--但是当我们仔细阅读题面后,会发现其实并没有那么简单. 我们知道并查集可以很轻松地维护具有传递性的信息,也就 ...

  6. luogu P3183 [HAOI2016]食物链 |记忆化搜索

    如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数.物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3......am- ...

  7. 「Luogu P3183」[HAOI2016]食物链 解题报告

    身为一个蒟蒻,由于刷不过[NOI2001]食物链 于是出门左转写了道另一道假的食物链 戳这里 这里的食物链个条数其实就是有向图的路径数(应该是这么说吧,我弱) 思路: 拓扑(Topulogy)(一本正 ...

  8. Luogu P2024 [NOI2001]食物链

    并查集 首先先要读懂题目,a是b的食物的话,b的天敌是a,b的食物是a的天敌 比如,人吃鸡,鸡吃草,那么草吃人..... 所以建3个并查集,+n时表示这是其食物,+2*n时表示这是其天敌 所以当x,y ...

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

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

随机推荐

  1. c# webBrowser清除缓存问题

    1.webBrowser的浏览器为ie. 2.通过清除ie缓存即可. 3.代码调用如下: public enum ShowCommands : int { SW_HIDE = , SW_SHOWNOR ...

  2. input value="值栈的值"

    <input type="text" value="<s:property value="myp.begintime"/>" ...

  3. 跨域写cookie

    假设a站想往b站写cookie,那么目前有两种方案,参考如下: 第一种(使用jsonp): a站js代码如下: $.ajax({ url: 'http://www.b.com/jsonp.jsp?do ...

  4. 浅谈 Sql Server 游标

    查询语句可能返回多条记录,如果数据量非常大,需要使用游标来逐条读取查询结果集中的记录.应用程序可以根据需要滚动或浏览其中的数据.本篇介绍游标的概念.分类.以及基本操作等内容. 一:认识游标游标是SQL ...

  5. 1st 四人小组项目

    小组名称:好好学习 项目组长:林莉 组员:王东涵.宫丽君.胡丽娜 项目选题:基于jsp的车库管理系统 项目期限:十周内<暂定> 需求分析:有待进一步思考

  6. 因为NLS_LANG 造成 Oracle数据库丢失 中文字符集兼容问题的处理.

    接着上一封blog. 因为sqlplus的 乱码问题 我修改了 注册表里面 NLS_LANG 的 value值.主要改动为: NLS_LANG source: SIMPLIFIED CHINESE_C ...

  7. jenkins 配置git 学习

    由于Jenkins没有默认安装Git插件,需要Git库同步时候,需要手动选择安装git插件 在“系统管理”->“管理插件”中找到,“可选插件”选项卡.“过滤“(一个名为过滤的搜素窗口)中可以用键 ...

  8. 第208天:jQuery框架封装(一)

    一.事件框架 1.DOM2 --事件流 事件流 :冒泡 捕获 1.1冒泡:事件按照从最特定的事件目标到最不特定的事件目标(document对象或者body)的顺序触发. 1.1.1浏览器兼容问题处理 ...

  9. HDU4790_Just Random

    这个题目我只能说我一看就知道是这么做的,但是由于实现能力略水,Wa了3发. 题意为给你两个区间[a,b]和[c,d],两个区间分别任取一个数,现在要你求出这个数模p的值为m的概率有多大. 其实是这么做 ...

  10. BZOJ 2427 软件安装(强连通分量+树形背包)

    题意:现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大).但是现在有 ...