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] ...
随机推荐
- TableView的性能优化
现在市场上的iOS应用程序界面中使用最多的UI控件是什么? 答案肯定是UITableView,几乎每一款App都有很多的界面是由UITableView实现的,所以为了做出一款优秀的App,让用户有更好 ...
- python基于万象优图识别图片中的中文
最近一直在研究光学字符识别,即OCR.最开始在谷爹那里了解到了开源的Tesseract,可以拿来识别简单的英文和数字.但是识别中文的准确率并不高. 然后从Tesseract到Tesseract.js, ...
- 关于extjs表单布局的几种方式
一.用column布局 layout:'column', defaults:{ style:'float:left;margin:4px;', columnWidth: 0.49, msgTarget ...
- 阻塞IO
服务端 from socket import * server = socket(AF_INET,SOCK_STREAM) server.bind(('127.0.0.1',8080)) server ...
- 怎么样防止Sql注入
(1)对于动态构造SQL查询的场合,可以使用下面的技术: 第一:替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义.再来看前面的例子,“SELECT * from Us ...
- 【转】vim替换命令
vim替换命令 free:此文后面涉及了正则表达式,随便看了一下,觉得正则表达式有时间学一学对于在Linux下操作也是方便许多 替換(substitute) :[range]s/pattern/str ...
- 新建JSPWeb应用
首先,在eclipse Java EE里新建项目,选择Dynamic Web Project 目录如图所示,在WebContent里建立新文件JSP File. 先在body标签里写入hello wo ...
- MySQL常用存储引擎
MySQL存储引擎主要有两大类: 1. 事务安全表:InnoDB.BDB. 2. 非事务安全表:MyISAM.MEMORY.MERGE.EXAMPLE.NDB Cluster.ARCHIVE.CSV. ...
- struts2国际化相关问题
国际化资源文件的方式: Action范围的 包范围的 临时的 全局的(推荐) 一.配置全局的国际化资源文件 1.在类路径下,创建国际化资源文件 baseName.properties baseName ...
- Ubuntu远程登陆、SSH图形界面、WOL远程唤醒
本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 实现目标:通过路由器配置路由路径,将拨号获取的公网IP地址指向局域网Ubuntu服务器.家里有 ...