因为是中文题,题意就不说了,直接说思路

我们不知道给的说法中的动物属于A B C哪一类,所以我们可以用不同区间的数字表示这几类动物,这并不影响结果,我们可以用并查集把属于一类的动物放在一块,举个例子:

A    2*n ~ 3*n-1

B    n ~ 2*n-1

C   0 ~ n-1

假设 n =10,1和3是同类,那么1和3并到一块,11和13并到一块,21和23并到一块。那么这样既不相互矛盾,又把这三种动物的可能性列举了出来。1捕食4,那么说明1比4高了一个等级,将1和14归并为一类,11和24归并为一类,21和4归并为一类,即B吃C,A吃B,C吃A。

看代码:

#include<stdio.h>
int f[160001];
int getf(int v)
{
if(f[v]==v)
return v;
return f[v]=getf(f[v]);
}
void marge(int u,int v)
{
int t1=getf(u),t2=getf(v);
if(t1!=t2)
f[t2]=t1;
}
bool same(int u,int v)
{
int t1=getf(u),t2=getf(v);
if(t1!=t2)
return 0;
return 1;
}
int main()
{
//A 2*n ~ 3*n-1 //B n ~ 2*n-1 //C 0~ n-1
int n,m,sum,a,b,p;
scanf("%d%d",&n,&m);
for(int i=0; i<n*3+10; i++)
f[i]=i;
sum=0;
for(int i=0; i<m; i++)
{
scanf("%d%d%d",&p,&a,&b);
a-=1,b-=1;
if(a>=n||b>=n||b<0||a<0)
{
sum++;
continue;
}
if(p==1)
{
if(same(a,b+n)||same(a,b+2*n))//a和b不能有捕食和被捕食的关系
sum++;
else
{
marge(a,b);//同一等级
marge(a+n,b+n);
marge(a+2*n,b+2*n);
}
}
else if(p==2)
{
if(same(a,b)||same(a,b+2*n))//a和不能是同类 也不能是b捕食a
sum++;
else//a捕食b表示a和b+n是同一等级
{
marge(a,b+n);
marge(a+n,b+2*n);
marge(a+2*n,b);
}
}
}
printf("%d\n",sum);
return 0;
}

poj——1182食物链 并查集(提升版)的更多相关文章

  1. POJ 1182 食物链 [并查集 带权并查集 开拓思路]

    传送门 P - 食物链 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit  ...

  2. poj 1182 食物链 并查集 题解《挑战程序设计竞赛》

    地址 http://poj.org/problem?id=1182 题解 可以考虑使用并查集解决 但是并不是简单的记录是否同一组的这般使用 每个动物都有三个并查集 自己 天敌 捕食 并查集 那么在获得 ...

  3. POJ 1182 食物链(并查集的使用)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 81915   Accepted: 24462 Description ...

  4. poj 1182 食物链 并查集的又一个用法

    食物链   Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 41584   Accepted: 12090 Descripti ...

  5. POJ 1182食物链(并查集)

    食物链Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 85474 Accepted: 25549Description动物王国中有三 ...

  6. POJ - 1182 食物链 并查集经典

    思路:设r(x)表示节点x与根结点的关系,px表示x的根结点.记录每个节点与其父节点的关系,就能很方便知道每个节点以及和它的父节点的关系. struct node{ int par; //父亲节点 i ...

  7. POJ 1182 食物链 (并查集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 50601   Accepted: 14786 Description ...

  8. POJ 1182 食物链(并查集)

    题目链接 经过宝哥的讲解,终于对这种问题有了进一步的理解.根据flag[x]和flag[y]求flag[tx]是最关键的了. 0吃1,1吃2,2吃0. 假设flag[tx] = X; 那么X + fl ...

  9. poj 1182 (关系并查集) 食物链

    题目传送门:http://poj.org/problem?id=1182 这是一道关系型并查集的题,对于每个动物来说,只有三种情况:同类,吃与被吃: 所以可以用0,1,2三个数字代表三种情况,在使用并 ...

随机推荐

  1. Ueditor富文本编辑器--上传图片自定义上传操作

    最近负责将公司官网从静态网站改版成动态网站,方便公司推广营销人员修改增加文案,避免官网文案维护过于依赖技术人员.在做后台管理系统时用到了富文本编辑器Ueditor,因为公司有一个阿里云文件资源服务器, ...

  2. Samtec与Neoconix达成合作并和II-VI推出新产品

    序言:Samtec近日动作不断, 近日Samtec与Neoconix达成合作并和II-VI推出新产品,以下是详细内容. Samtec与Neoconix签订Neoconix PCBeam 技术授权协议, ...

  3. Python——工厂模式

    目录 前言 一.简单工厂 二.工厂方法 抽象工厂 结论 参考 前言 工厂模式,顾名思义就是我们可以通过一个指定的"工厂"获得需要的"产品". 在设计模式中主要用 ...

  4. Java基础篇(02):特殊的String类,和相关扩展API

    本文源码:GitHub·点这里 || GitEE·点这里 一.String类简介 1.基础简介 字符串是一个特殊的数据类型,属于引用类型.String类在Java中使用关键字final修饰,所以这个类 ...

  5. JavaScript面向对象class

    JavaScript面向对象class 本周逆战班学习的主题是“面向对象”,很多人觉得面向对象很难理解,但其实我们早就在面向对象的思想之中了,今天就让我们再重新认识一下他,主要介绍一下ES6中新增的c ...

  6. go 下载qq音乐

    //go下载qq音乐 package main import ( _ "fmt" jsoniter "github.com/json-iterator/go" ...

  7. 一起了解 .Net Foundation 项目 No.16

    .Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. Orchard CMS O ...

  8. python自动化第二课 - python基础2

    1.判断奇数偶数 num = input("请输入一个数字,判断是否为偶数:") print(not int(num) % 2) 2.浮点数的高精度计算用Decimal(from ...

  9. 鼠年开元用逐浪CMS v8.13版-NoSQL安装更轻便

    作为国内领先的Zoomla!逐浪CMS,一直以来深受人道的除了其功能强大.性能稳定外,易用性也是其突出的现. 自Zoomla!逐浪CMS 8.x开始,官方在其程序包中,集成了一键安装进程,从而大大提升 ...

  10. Intel优化Gen7驱动代码 Geekbench 5性能猛增

    Linux下缺少大量开发.支持是会导致各种奇葩的错误的,Intel日前就提交了一个代码修复,22nm Ivybridge及Haswell处理器的GeekBench 5的性能就提升了330%. 3.3倍 ...