食物链--poj1182(并查集含有关系)
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(并查集含有关系)的更多相关文章
- poj1182 食物链(并查集 好题)
https://vjudge.net/problem/POJ-1182 并查集经典题 对于每只动物创建3个元素,x, x+N, x+2*N(分别表示x属于A类,B类和C类). 把两个元素放在一个组代表 ...
- NOI2001|POJ1182食物链[种类并查集 向量]
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 65430 Accepted: 19283 Description ...
- POJ1182 食物链(并查集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 55260 Accepted: 16210 Description ...
- POJ1182食物链(并查集)
Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到 ...
- POJ-1182 食物链(并查集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 75814 Accepted: 22528 Description ...
- poj1182 食物链【并查集-好题!】
动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有人用两 ...
- POJ1182 食物链 —— 种类并查集
题目链接:http://poj.org/problem?id=1182 食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: ...
- Poj1182 食物链(并查集/带权并查集)
题面 Poj 题解 这里采用并查集的补集. \(x\)表示同类集合,\(x+n\)表示敌人集合,\(x+n\times2\)表示敌人的敌人集合. 如果当前给出的是一对同类关系,就判断\(x\)是否吃\ ...
- POJ1182食物链(并查集经典好题)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66964#problem/E 题目思路:主要有两种思路:1.带权并查集2.挑战程 ...
随机推荐
- CentOS7--配置时间和日期
CentOS7提供三个命令行工具,可用于配置和显示有关系统日期和时间的信息. timedatectl:Linux 7中的新增功能,也是systemd其中的一部分. date:系统时钟,也成为软件时钟, ...
- Android的Fragment中onActivityResult不被调用
1.检查该Fragment所属的Activity中,是否重写了onActivityResult方法. 2.检查Fragment中的startActivityForResult的调用方式. 请确保不要使 ...
- 简析iOS动画原理及实现——Core Animation
本文转载至 http://www.tuicool.com/articles/e2qaYjA 原文 https://tech.imdada.cn/2016/06/21/ios-core-animati ...
- (iOS)判断GPS坐标是否在中国
博文转载至 http://blog.csdn.net/cuibo1123/article/details/45691631 火星坐标经纬度范围 由于火星坐标问题,所以需要判断一下经纬度是否在中国. 基 ...
- iptables 指令语法
iptables 指令 语法: iptables [-t table] command [match] [-j target/jump] -t 参数用来指定规则表,内建的规则表有三个,分别是:nat. ...
- open-falcon之judge
功能 judge 模块主要从transfer中接收数据,并从HBS中获取报警策略,然后进行阈值报警判断 从HBS获取报警策略 接收transfer 上报的数据,并存储最新几个点 判断阈值,产生报警事件 ...
- IE6/IE7/IE8下float:right的异常及其解决方法
1.最简单的方法就是调换顺序,将需要右浮动的元素写在前面.写成这样:<h2><a href="#">更多>></a>小标题</ ...
- thinkphp 多对多关联模型(转)
先建立一个模型 1 2 3 4 5 6 7 8 9 10 11 12 <?php class UserModel extends RelationModel{ protected $ ...
- jquery.peity.js简介
jQuery简单图表peity.js <html xmlns="http://www.w3.org/1999/xhtml"> <head> <titl ...
- H.264 White Paper学习笔记(二)帧内预测
为什么要有帧内预测?因为一般来说,对于一幅图像,相邻的两个像素的亮度和色度值之间经常是比较接近的,也就是颜色是逐渐变化的,不会一下子突变成完全不一样的颜色.而进行视频编码,目的就是利用这个相关性,来进 ...