【题目链接】 http://poj.org/problem?id=1182

【题目大意】

  草原上有三种物种,分别为A,B,C

  A吃B,B吃C,C吃A。

  1 x y表示x和y是同类,2 x y表示x吃y

  问给出的信息有几条是和前面相违背的

【题解】

  之前这道题是用加权并查集做的,做的有些晕晕乎乎,现在换了种思路做就清晰很多了

  将每个点拆点,比如x拆为,x-A,x-B,x-C

  表示x属于A类,x属于B类,和x属于C类,

  如果y和x属于同类,那么合并x-A和y-A,x-B和y-B,x-C和y-C

  如果是x吃y的情况,那么合并x-A和y-B,x-B和y-C,x-C和y-A

  也就是说将x属于A这种类型的条件作为节点进行并查集运算

  就能很轻松地解决这种问题

【代码】

#include <cstdio>
const int N=50010*3;
int f[N],n,k,ans=0,op,x,y;
void init(int n){for(int i=0;i<=n;i++)f[i]=i;}
int sf(int x){return f[x]==x?x:f[x]=sf(f[x]);}
bool Same(int x,int y){return sf(x)==sf(y);}
bool Union(int x,int y){f[sf(x)]=sf(y);}
int main(){
scanf("%d%d",&n,&k);
init(3*n);
for(int i=1;i<=k;i++){
scanf("%d%d%d",&op,&x,&y);
if(--x<0||x>=n||--y<0||y>=n){ans++;continue;}
if(op==1){
if(Same(x,y+n)||Same(x,y+2*n))ans++;
else{Union(x,y);Union(x+n,y+n);Union(x+2*n,y+2*n);}
}else{
if(Same(x,y)||Same(x,y+2*n))ans++;
else{Union(x,y+n);Union(x+n,y+2*n);Union(x+2*n,y);}
}
}printf("%d\n",ans);
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食物链 并查集(提升版)

    因为是中文题,题意就不说了,直接说思路: 我们不知道给的说法中的动物属于A B C哪一类,所以我们可以用不同区间的数字表示这几类动物,这并不影响结果,我们可以用并查集把属于一类的动物放在一块,举个例子 ...

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

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

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

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

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

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

随机推荐

  1. mysql 主键自增

    比如创建表格,表格ID需要自增 将ID设置成主键,并配置auto_increment 例: create table test( id  int(4)  not null  primary key   ...

  2. mysql拒绝访问(Error 1044/1045)问题的解决

    遇到此问题 一般是权限问题 修改权限即可 然后用grant命令下放权限. GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY 'ro ...

  3. 开源日志库log4cplus+VS2008使用

    一.简介     log4cplus是C++编写的开源的日志系统,功能非常全面.本文介绍如何在Windows+VS2008中使用该日志库.   二.下载     可从网站[url]http://log ...

  4. Excel在任务栏中只显示一个窗口的解决办法

     Excel在任务栏中只显示一个窗口的解决办法  以前朋友遇到过这个问题,这次自己又遇到了,习惯了以前的那种在任务栏中显示全部窗口,方便用Alt+Tab键进行切换. 如果同时打开许多Excel工作簿, ...

  5. SecureCRT按退格键出现^H问题解决

    解决办法一: 解决办法二: ctrl+backspace.即是返回

  6. HDFS的运行原理(转载)

    原文地址:http://www.cnblogs.com/laov/p/3434917.html 简介 HDFS(Hadoop Distributed File System )Hadoop分布式文件系 ...

  7. OC基础7:变量和数据类型

    "OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.有时候初始化需要让对象带有初始值,那么 ...

  8. 移动前端开发之viewport的深入理解(转)

    在移动设备上进行网页的重构或开发,首先得搞明白的就是移动设备上的viewport了,只有明白了viewport的概念以及弄清楚了跟viewport有关的meta标签的使用,才能更好地让我们的网页适配或 ...

  9. css系列教程--overflow min/maxheight content

    outline:这只轮廓样式,与border类似.写法参考border. overflow/overflow-x/overflow-y:visible/hidden/scroll/auto/no-di ...

  10. Oracle的分页查询语句优化

    Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. (一)   分页查询格式: SELECT * FROM  ( SELECT A.*, ROWNUM RN  FROM (SELECT ...