POJ1082食物链
加权并查集入门习题。
传送门http://poj.org/problem?id=1182
下面来记录一下做法:
并查集的作用是询问两个对象时候在同一集合以及将两个非空不相交集合合并。
本题涉及两点之间是否能够两边,这样就可以生成多个集合。
而d=1 ,d=2则相当于将两个集合检索,若合法则合并,否则则将ans++。
但在检索时,我们发现采用一般的并查集无法实现(开三个除外),因为无法简单的利用两点是否在同一集合而判断是否可行。
故想到将其附加信息,而加权并查集的信息一般处理为儿子对父节点的关系或父节点对儿子的关系。
本题设rec[i]为i节点对fa[i]的关系。
如果通过a->b ,b->c能求出a->c,那么本题就变得十分简单。
通过枚举可以发现
令0表示同类,1表示被父节点吃,2表示吃父节点。
这样在求a->c 时,就可以用(rec[i]+rec[fa[i]])%3来表示。
下面上代码:
#include "iostream"
#include "cstdio"
#include "cstring"
#include "cctype"
using namespace std;
const int maxn = ;
int n ,k ,fa[maxn] ,rec[maxn];
void read(int &x)
{
x = ;
char c = getchar();
while(!isdigit(c))
c = getchar();
while(isdigit(c))
{
x = (x<<) + (x<<) + c - '';
c = getchar();
}
return ;
} int find_(int x)
{
if(x == fa[x]) return x;
int temp = fa[x];
fa[x] = find_(fa[x]);
rec[x] = (rec[temp]+rec[x])%;
return fa[x];
} int Union(int x ,int y ,int d)
{
int f1 = find_(x) ,f2 = find_(y);
if(f1 == f2)
{
if(d == )
{
if(rec[x] == rec[y])
return ;
else return ;
}
if(d == && rec[x] != (rec[y] + )%)
return ;
return ;
}
else
{
fa[f2] = f1;
rec[f2] = (rec[x] + (d-) + (-rec[y])) % ;
}
return ;
} int main()
{
read(n); read(k);
int num1 ,num2 ,num3 ,ans = ;
for(int i=; i<=n; i++) fa[i] = i ,rec[i] = ;
for(int i=; i<=k; i++)
{
read(num1);
read(num2);
read(num3);
if(num2>n || num3>n)
{
++ans;
continue;
}
if(num1 == && num2 == num3)
{
++ans;
continue;
}
ans += Union(num2 ,num3 ,num1);
}
printf("%d" ,ans);
}
POJ1082食物链的更多相关文章
- 关押罪犯 and 食物链(并查集)
题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值"( ...
- NOI2001|POJ1182食物链[种类并查集 向量]
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 65430 Accepted: 19283 Description ...
- tyvj1202 数数食物链
描述 TsyD学习了生物的生态环境那一张后,老师留了一项作业,就是给一张食物网,求所有食物链的总数.(从最低营养级生物(它不能吃任何其他的生物)开始到最高营养级(它不能被任何其他生物吃) 叫做一条食物 ...
- vijos1531 食物链
背景 安徽省芜湖市第二十七中学测试题 NOI 2001 食物链(eat) Description:OfficialData:OfficialProgram:JackDavid127 描述 动物王国中有 ...
- poj1182食物链_并查集_挑战程序设计竞赛例题
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 65534 Accepted: 19321 Description ...
- BZOJ4562: [Haoi2016]食物链
Description 如图所示为某生态系统的食物网示意图,据图回答第1小题 现在给你n个物种和m条能量流动关系,求其中的食物链条数. 物种的名称为从1到n编号 M条能量流动关系形如 a1 b1 a2 ...
- [poj1182]食物链(并查集+补集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 64841 Accepted: 19077 Description ...
- [并查集] POJ 1182 食物链
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 66294 Accepted: 19539 Description ...
- 【BZOJ-4562】食物链 记忆化搜索(拓扑序 + DP)
4562: [Haoi2016]食物链 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 133 Solved: 112[Submit][Status] ...
随机推荐
- linux RPM软件包管理
linux RPM软件包管理 目录 1.软件包的介绍 2.rpm包管理 3.rpm包管理前端工具 1.软件包的介绍 在我们在对软件包管理前,先对软件包有个很好的了解,这样更方便我们来对其进行管理. 软 ...
- Django自定义过滤器中is_safe和need_autoescape两个参数的理解
自定义template过滤器的方法参考文档,不再赘述 is_safe 文档说明过滤的两种最终形态,其中一种是设置register.filter(is_safe=True),但是对is_safe的具体作 ...
- win10 uwp DataContext
本文告诉大家DataContext的多种绑法. 适合于WPF的绑定和UWP的绑定. 我告诉大家很多个方法,所有的方法都有自己的优点和缺点,可以依靠自己喜欢的用法使用.当然,可以在新手面前秀下,一个页面 ...
- JavaScript正则表达式实例汇总
本文会持续更新 -------------------------------------------------------------------------------------------- ...
- Traefik实现Kubernetes集群服务外部https访问
转载请注明出处:http://www.cnblogs.com/wayneiscoming/p/7707942.html traefik 是一个前端http反向代理服务器以及负载均衡器,支持多种微服务后 ...
- [译]ASP.NET Core 2.0 依赖注入
问题 如何使用 ASP.NET Core 服务容器进行依赖注入? 答案 创建一个服务 public interface IGreetingService { string Greet(string t ...
- 【转】IO流程
原文地址:http://blog.chinaunix.net/uid-26922071-id-3954900.html IO之流程与buffer概览 为了说明这个流程,还是用图来描述一下比较直观. ...
- Entity Framework Core 2.0 使用代码进行自动迁移
一.前言 我们在使用EF进行开发的时候,肯定会遇到将迁移更新到生产数据库这个问题,前面写了一篇文章介绍了Entity Framework Core 2.0的入门使用,这里面介绍了使用命令生成迁移所需的 ...
- C#基本功之泛型
一.没有泛型之前 在没有泛型之前,我们是怎么处理不同类型的相同操作的: 示例1 //下面是一个处理string类型的集合类型 public class MyStringList { string[] ...
- Java正则表达式详解+练习
一.导读 正则表达式,又称规则表达式.(英文名Regular Expression,所以代码中常以regex.regexp.RE表示).正则表达式简单说就是用于操作文本数据的规则表达式,在Java中我 ...