http://poj.org/problem?id=1182

 

题意应该就不用说了

 再次回到食物链这道题,自己写了一遍,一直wa...原因竟然是不能用多实例,我也是醉了,但是我真的彻底的理解了,那些关系之间的转化,和上面那道差不多;

这道中的 r[i]表示i和f[i]之间的关系;

r[i] = 0,表示 i 和 f[i] 同类,

r[i] = 1, 表示 i 被 f[i] 吃;

r[i] = 2, 表示 i 吃 f[i];

至于为什么这样表示的看下面这些;

首先两个动物之间的关系只有三种即:同类,吃别人,被别人吃;

题中说了,如果出现 A吃B,B吃C,则 C吃A

下面所说的 吃 和 被吃 都是 i 对 f[i] 而言的, 吃 就是i吃f[i] ,被吃 就是i被f[i]吃;

同样我们可以得到 :

吃 + 吃 = 被吃;    式1;

被吃 + 吃 = 同类;  式2;

吃 + 同类 = 吃;    式3;

由上面可以看出同类用0表示,吃可以用1表示,被吃可以用2表示;

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <stack>
#include <map>
#include <vector>
using namespace std;
typedef long long LL;
#define N 52100
#define met(a, b) memset(a, b, sizeof(a))
#define INF 0x3f3f3f3f int f[N], r[N]; int Find(int x)
{
int k = f[x];
if(x!=f[x])
{
f[x] = Find(f[x]);
r[x] = (r[x] + r[k]) % ;
}
return f[x];
} int main()
{
int n, m, ans; scanf("%d %d", &n, &m); for(int i=; i<=n; i++)
f[i] = i, r[i] = ; ans = ; while(m --)
{
int op, x, y;
scanf("%d %d %d", &op, &x, &y); if( x > n || y > n || (x == y && op == ))
{
ans++;
continue;
} op --;///表示 x 指向 y 的关系; int px = Find(x);
int py = Find(y); if(px != py)
{
f[px] = py;
r[px] = (r[y] - op - r[x] + ) % ;
}
else if(px == py && (r[x]+op)% != r[y])
ans++;
}
printf("%d\n", ans);
return ;
}

推荐一个关系推倒的其他方法的博客http://www.cnblogs.com/wuyiqi/archive/2011/08/24/come__in.html

食物链--poj1182(并查集含有关系)的更多相关文章

  1. poj1182 食物链(并查集 好题)

    https://vjudge.net/problem/POJ-1182 并查集经典题 对于每只动物创建3个元素,x, x+N, x+2*N(分别表示x属于A类,B类和C类). 把两个元素放在一个组代表 ...

  2. NOI2001|POJ1182食物链[种类并查集 向量]

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

  3. POJ1182 食物链(并查集)

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

  4. POJ1182食物链(并查集)

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

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

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

  6. poj1182 食物链【并查集-好题!】

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

  7. POJ1182 食物链 —— 种类并查集

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

  8. Poj1182 食物链(并查集/带权并查集)

    题面 Poj 题解 这里采用并查集的补集. \(x\)表示同类集合,\(x+n\)表示敌人集合,\(x+n\times2\)表示敌人的敌人集合. 如果当前给出的是一对同类关系,就判断\(x\)是否吃\ ...

  9. POJ1182食物链(并查集经典好题)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66964#problem/E 题目思路:主要有两种思路:1.带权并查集2.挑战程 ...

随机推荐

  1. Linux man 命令

    man命令可以用来查看Linux命令的帮助信息 .配置文件的帮助信息等等,通过不同的代号可以查看不同的帮助信息: 代号 含义 1 查看Linux命令的帮助信息(默认) 2 查看内核提供的函数的帮助信息 ...

  2. N76E003之SPI

    串行外围总线 (SPI)N76E003系列提供支持高速串行通信的SPI模块.SPI 为微控制与外设 EEPROM, LCD 驱动, D/A 转换之间提供全双工.高速.同步传输的总线.可提供主机从机模式 ...

  3. 使用IEDA新建jsp项目以后使用javax.servlet.*报错

    新建一个jsp项目,然后再里面配置完了一切写了一个servlet的文件: 点击运行的时候出现了javax程序包不存在的错误,百度了许多都在说是tomcat的事情,吧tomcat/lib下面的servl ...

  4. iOS - 选取相册中iCloud云上图片和视频的处理

    关于iOS选取相册中iCloud云上图片和视频  推荐看:TZImagePickerController的源码,这个是一个非常靠谱的相册选择图片视频的库 .当然也可以自己写 如下遇到的问题 工作原因, ...

  5. CSS-禁用a标签

    <style> a.disabled { pointer-events: none; filter: alpha(opacity=50); /*IE滤镜,透明度50%*/ -moz-opa ...

  6. 【DP-最大子串和】PAT1007. Maximum Subsequence Sum

    1007. Maximum Subsequence Sum (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...

  7. MacOS 安装PyQt5

    PyQt5官方安装教程指出2种安装方法: Installing from Wheels Building and Installing from Source 网上搜罗的大多是按照第二种方法安装的,本 ...

  8. NC 的高级应用

    高级用法: (1)作攻击程序用,例子: 格式1:type.exe c:\exploit.txt|nc -nvv 192.168.x.x 80 格式2:nc -nvv 192.168.x.x 80 &l ...

  9. 关于sizeof和strlen

    已知 char *str1="absde"; char str2[]="absde"; char str3[8]={'a',}; char ss[] = &qu ...

  10. (TOJ 4413)IP address

    描述 To give you an IP address, it may be dotted decimal IP address, it may be 32-bit binary IP addres ...