加权并查集入门习题。

传送门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食物链的更多相关文章

  1. 关押罪犯 and 食物链(并查集)

    题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值"( ...

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

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

  3. tyvj1202 数数食物链

    描述 TsyD学习了生物的生态环境那一张后,老师留了一项作业,就是给一张食物网,求所有食物链的总数.(从最低营养级生物(它不能吃任何其他的生物)开始到最高营养级(它不能被任何其他生物吃) 叫做一条食物 ...

  4. vijos1531 食物链

    背景 安徽省芜湖市第二十七中学测试题 NOI 2001 食物链(eat) Description:OfficialData:OfficialProgram:JackDavid127 描述 动物王国中有 ...

  5. poj1182食物链_并查集_挑战程序设计竞赛例题

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

  6. BZOJ4562: [Haoi2016]食物链

    Description 如图所示为某生态系统的食物网示意图,据图回答第1小题 现在给你n个物种和m条能量流动关系,求其中的食物链条数. 物种的名称为从1到n编号 M条能量流动关系形如 a1 b1 a2 ...

  7. [poj1182]食物链(并查集+补集)

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

  8. [并查集] POJ 1182 食物链

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

  9. 【BZOJ-4562】食物链 记忆化搜索(拓扑序 + DP)

    4562: [Haoi2016]食物链 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 133  Solved: 112[Submit][Status] ...

随机推荐

  1. Spring读书笔记——bean解析

    前情回顾 上篇<Spring读书笔记--bean加载>我们从代码角度介绍了有哪些类负责解析XML文件,又是如何一步步从XML格式脱变成我们熟悉的bean的,直到DefaultBeanDef ...

  2. 【转载】基于vw等viewport视区相对单位的响应式排版和布局

    文章转载自 张鑫旭-鑫空间-鑫生活 http://www.zhangxinxu.com/wordpress/ 原文链接:http://www.zhangxinxu.com/wordpress/?p=5 ...

  3. mac 通过brew安装php70 +php-fpm+ phalcon3.0.3

    安装php7.0.15 brew install homebrew/php/php70 brew install homebrew/php/php70-mcrypt brew install home ...

  4. Appium python自动化测试系列之Android UIAutomator终极定位(七)

    android uiautomator text定位 可能有人不知道为什么说android uiautomator是终极定位,而且android uiautomator和appium有什么关系呢?如果 ...

  5. #tensorflow入门(1)

    tensorflow入门(1) 关于 TensorFlow TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库.节点(Nodes)在图中表示数学操 ...

  6. win10 uwp 通知Toast

    win10通知使用Toast 可以使用win10 模板添加通知 var t = Windows.UI.Notifications.ToastTemplateType.ToastText02; 使用Ge ...

  7. HashMap工作原理 和 HashTable

    原文链接: Javarevisited 翻译: ImportNew.com - 唐小娟 译文链接: http://www.importnew.com/7099.html 你用过HashMap吗 譬如H ...

  8. Spring 组成

    Spring 主要由 Bean Context Core 三个组件组成 Bean 组件是整个 Spring 核心,Spring 通过管理 Bean 组件提供服务 Context 是 Bean 组件容器 ...

  9. 对于Swift的Enum,文档上没有说的

    今天无意发现一个东西, 但是在文档上看了很多遍都没找到, 但是亲测是可行的, 那到底是什么呢? 以前我们定义枚举 会这样: enum Hello { case Item( String, Int) c ...

  10. 关于防止sql注入的几个知识点

    1.PDO预处理是首选. 你可以把他看成是要运行的sql的已经编译过的模板,它可以用变量参数进行定制 它有两个显著优点: 1.1:查询仅需解析一次,但可以用相同或者不同参数执行多次.换句话说如果要以不 ...