食物链

Time Limit: 1000MS Memory Limit: 10000K

Description

动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。
现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。
有人用两种说法对这N个动物所构成的食物链关系进行描述:
第一种说法是”1 X Y”,表示X和Y是同类。
第二种说法是”2 X Y”,表示X吃Y。
此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。
1) 当前的话与前面的某些真的话冲突,就是假话;
2) 当前的话中X或Y比N大,就是假话;
3) 当前的话表示X吃X,就是假话。
你的任务是根据给定的N(1 <= N <= 50,000)和K句话(0 <= K <= 100,000),输出假话的总数。

Input

第一行是两个整数N和K,以一个空格分隔。
以下K行每行是三个正整数 D,X,Y,两数之间用一个空格隔开,其中D表示说法的种类。
若D=1,则表示X和Y是同类。
若D=2,则表示X吃Y。

Output

只有一个整数,表示假话的数目。

Sample Input

100 7
1 101 1
2 1 2
2 2 3
2 3 3
1 1 3
2 3 1
1 5 5

Sample Output

3


解题心得:

  1. 就是一个很标准的食物链的问题,不懂的可以去看看食物链,其实都是一样的,只不过在poj双面要交,单组输入,写的多组老是wrong。

#include<stdio.h>
#include<iostream>
using namespace std;
const int maxn = 1e5+100;
struct node
{int pre,relation;
} p[maxn];int find(int x)
{int temp;if(x == p[x].pre)return x;temp = p[x].pre;p[x].pre = find(temp);p[x].relation = (p[x].relation + p[temp].relation)%3;return p[x].pre;
}int main()
{int n,m,sum=0;scanf("%d%d",&n,&m);for(int i=0; i<=n; i++){p[i].pre = i;p[i].relation = 0;}while(m--){int c,a,b;scanf("%d%d%d",&c,&a,&b);if(a > n || b > n){sum++;continue;}if(a == b && c == 2){sum++;continue;}int fa = find(a);int fb = find(b);if(fa != fb){p[fb].pre = fa;p[fb].relation = (3 + p[a].relation + (c-1) - p[b].relation)%3;}else{if(c == 1 && p[a].relation != p[b].relation)sum++;if(c == 2 && ((3 - p[a].relation + p[b].relation)%3 != c-1))sum++;}}printf("%d  ",sum);return 0;
}

在网上看到一份别人的,很简洁的代码:

#include<cstdio>
const int N=50001;
int p[N],r[N],n;
int findset(int x)
{if(x!=p[x]){int fx=findset(p[x]);r[x]=(r[x]+r[p[x]])%3;p[x]=fx;}return p[x];
}
bool Union(int d,int x,int y)
{int fx=findset(x),fy=findset(y);if(fx==fy){if((r[y]-r[x]+3)%3!=d)return 1;else return 0;}p[fy]=fx;r[fy]=(r[x]-r[y]+d+3)%3;return 0;
}
int main()
{int k,ans,i,d,x,y;scanf("%d%d",&n,&k);ans=0;for(i=1;i<=n;i++)p[i]=i,r[i]=0;while(k--){scanf("%d%d%d",&d,&x,&y);if(x>n||y>n||(x==y&&d==2)){ans++;continue;}if(Union(d-1,x,y))ans++;}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/GoldenFingers/p/9107293.html

并查集:POJ1182-食物链(并查集比较高端的应用)相关推荐

  1. anasys hpc集群_ANSYS HPC高性能计算与Wiseteam高端图形工作站方案

    ANSYS HPC 高性能计算与 Wiseteam 高端图形工作站方案 高性能计算( HPC )通过创建大型的.高可信度的模型(这些模型能为提议的设计方案的性能提供精 确的细节洞察)为工程仿真增加了大 ...

  2. POJ1182 食物链---(经典种类并查集)

    题目链接:http://poj.org/problem?id=1182 食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: ...

  3. Bailian1182 POJ1182 食物链【并查集】

    1182:食物链 描述 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到 ...

  4. POJ1182 食物链【并查集】

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

  5. Noi2001食物链-并查集

    Noi2001食物链-并查集 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #incl ...

  6. 学习笔记——拓展域并查集和带权并查集

    1,拓展域并查集 一般的并查集只能查找出各元素之间是否存在某一种相同的联系,如:a和b是亲戚关系,b和c是亲戚关系,这时就可以查找出a和c也存在亲戚关系.但如果存在多种相对的联系时一般的并查集就不行了 ...

  7. 树形结构 —— 并查集 —— 带权并查集

    [概述] 定义:带权并查集即是结点存有权值信息的并查集. 适用:当两个元素之间的关系可以量化,并且关系可以合并时,可以使用带权并查集来维护元素之间的关系. 权值:带权并查集每个元素的权通常描述其与并查 ...

  8. 简单易懂的并查集算法以及并查集实战演练

    文章目录 前言 一.引例 二.结合引例写出并查集 1. 并查集维护一个数组 2. 并查集的 并 操作 3. 并查集的 查 操作 4. 基本并查集模板代码实现--第一版(有错误后面分析) 4.1 Jav ...

  9. SpringBoot+MyBatisPlus+Vue 前后端分离项目快速搭建【后端篇】【快速生成后端代码、封装结果集、增删改查、模糊查找】【毕设基础框架】

    前后端分离项目快速搭建[后端篇] 数据库准备 后端搭建 1.快速创建个SpringBoot项目 2.引入依赖 3.编写代码快速生成代码 4.运行代码生成器生成代码 5.编写application.pr ...

  10. SpringBoot+MyBatisPlus+Vue 前后端分离项目快速搭建【前端篇】【快速生成后端代码、封装结果集、增删改查、模糊查找】【毕设基础框架】

    前后端分离项目快速搭建[前端篇] 后端篇 前端篇 创建vue项目 安装所需工具 开始编码 1.在根目录下添加vue.config.js文件 2.编写main.js 3.编写App.vue 4.编写ax ...

最新文章

  1. HDU 3549 Flow Problem(最大流模版EK算法)
  2. Loj #6287 诗歌
  3. 将图片显示在应用最上层_谷歌Chrome 75将原生支持lazy loading,动动手也可以抢先试玩...
  4. php theexcerpt,wordpress的excerpt()函数的用法示例
  5. WebService学习笔记系列(四)
  6. python导入模块找不到什么原因_python模块以及导入出现ImportError: No module named 'xxx'问题...
  7. 如何删除搜索框的搜索记录(谷歌浏览器)
  8. html5+自动播放轮播插件,15个超强的jQuery/HTML5图片轮播插件
  9. 生活小常识日常生活小常识
  10. windows10无法连接远程桌面的问题的解决方法
  11. GIF图片如何用Photoshop去水印?
  12. 该升级了,阿里云Code升级Codeup | 云效
  13. 域环境users提权调用lsrunase.exe 批处理完成安装字体
  14. 在线翻译html网页,HTML网页到维基页面翻译器
  15. 关于前端开发中“模块”和“组件”概念的思考
  16. 【Nginx】Nginx简介
  17. Aggregated Residual Transformations for Deep Neural Networks(论文翻译)
  18. mapreuce1.0局限性
  19. 为什么零售企业需要越来越强调全渠道会员营销体系?
  20. 案例分析:TO B产品是如何演化出来的?

热门文章

  1. Proteus仿真STM32F103R6的寄存器版跑马灯程序(存储器宏定义)
  2. 一文读懂P Quant与 Q Quant ,量化交易与金融工程
  3. java生成验证码实例_Java生成验证码功能实例代码
  4. 042_Popconfirm气泡确认框
  5. 024_Progress进度条
  6. 041_Unicode对照表七
  7. Xml 格式数据的生成和解析
  8. day05:SQL_DCL ,权限控制
  9. Axure RP 8.0软件安装教程
  10. python sin_Python sin() 函数