POJ 1182食物链、
应用挑战程序设计那本书上的话:
对于每只动物i创建3个元素i—A,i—B,i—C,并用3xN个元素建立并查集。这个并查集维护如下信息:
(1)i—x表示“i属于种类x”
(2)并查集里的每一个组表示组内所有元素代表的情况都相同都同时发生或不发生
for example,如果i—A和j—B在同一个组里,就表示如果i属于种类A那么j一定属于种类B,如果j属于种类B那么i一定属于种类A。因此,对于每一条信息,只需要按照以下进行操作就可以了。
第一种,x和y属于同一类......合并x—A和y—A,x—B和y—B,x—C和y—C。
第二种,x吃y....................合并x—A和y—B,x—B和y—C,x—C和y—A。
不过在合并之前,需要先判断合并是否产生矛盾。例如在第一种信息的情况下,需要检查比如x—A和y—B或者y—C是否在同一组等信息
#include<cstdio>
#include<cstring>
const int N=50000+10;
int pre[N*3];
void init(int n)
{
for(int i=0;i<=n*3;++i)
pre[i]=i;
}
int find(int x)
{
if(x==pre[x])
return x;
else
return pre[x]=find(pre[x]);
}
bool same(int a,int b)
{
return find(a)==find(b);
}
void un(int a,int b)
{
int x=find(a);
int y=find(b);
if(x==y)
return;
else
pre[x]=y;
}
int main()
{
int n,k;
scanf("%d%d",&n,&k);
int ans=0;
init(n);
for(int i=0;i<k;++i){
int r,x,y;
scanf("%d%d%d",&r,&x,&y);
if(x>n||y>n||x<=0||y<=0){
++ans;
continue;
}
if(r==1){
if(same(x,y+n)||same(x,y+2*n))
++ans;
else{
un(x,y);
un(x+n,y+n);
un(x+2*n,y+2*n);
}
}
else{
if(same(x,y)||same(x,y+2*n))
++ans;
else{
un(x,y+n);
un(x+n,y+2*n);
un(x+2*n,y);
}
}
}
printf("%d\n",ans);
return 0;
}
接下来应用这种思路写POJ的2492
题意:就是说有N个虫子,异性交配,但现在不知道虫子的性别,现在给出M个事件,问会不会出现同性交配的现象
思路:创建两个组,维护(x,y+n),(y,x+n)
#include<cstdio>
#include<cstring>
#include<cmath>
const int qq=2000+5;
int pre[qq*2];
void init(int n)
{
for(int i=0;i<=n*2;++i)
pre[i]=i;
}
int find(int x)
{
if(x==pre[x])
return x;
else
return pre[x]=find(pre[x]);
}
bool same(int a,int b)
{
return find(a)==find(b);
}
void un(int a,int b)
{
int x=find(a);
int y=find(b);
if(x==y)
return;
else
pre[x]=y;
}
int main()
{
int t;scanf("%d",&t);
int p=1;
while(t--){
printf("Scenario #%d:\n",p++);
int x,y,n,k;
scanf("%d%d",&n,&k);
init(n);
int flag=1;
for(int i=0;i<k;++i){
scanf("%d%d",&x,&y);
if(same(x,y)||same(y,x))
flag=0;
else{
if(flag){
un(x,y+n);
un(y,x+n);
}
}
}
if(flag)
printf("No suspicious bugs found!\n");
else
printf("Suspicious bugs found!\n");
if(t) printf("\n");
}
return 0;
}
POJ上刷题留心,题目如何给你一定要按照它的做,比如他只有一组数据输入,你别while(scanf("")!=EOF) 我就以为这样纠结了一个下午,
总之刷POJ一定要多留心,要多相信自己的代码,剩下的可能就是题目细节方面的错误了
POJ 1182食物链、的更多相关文章
- poj 1182 食物链 (带关系的并查集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44835 Accepted: 13069 Description 动 ...
- poj 1182:食物链(种类并查集,食物链问题)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44168 Accepted: 12878 Description ...
- POJ 1182 食物链
G - 食物链 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Stat ...
- POJ 1182 食物链(种类并查集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 63592 Accepted: 18670 Description ...
- POJ 1182 食物链(经典带权并查集 向量思维模式 很重要)
传送门: http://poj.org/problem?id=1182 食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: ...
- POJ 1182——食物链——————【种类并查集】
食物链 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Status P ...
- POJ 1182 食物链 [并查集 带权并查集 开拓思路]
传送门 P - 食物链 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit ...
- 【原创】poj ----- 1182 食物链 解题报告
题目地址: http://poj.org/problem?id=1182 题目内容: 食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submi ...
- poj 1182 食物链 (并查集)
http://poj.org/problem?id=1182 关于并查集 很好的一道题,开始也看了一直没懂.这次是因为<挑战程序设计竞赛>书上有讲解看了几遍终于懂了.是一种很好的思路,跟网 ...
- POJ 1182 食物链(并查集拆点)
[题目链接] http://poj.org/problem?id=1182 [题目大意] 草原上有三种物种,分别为A,B,C A吃B,B吃C,C吃A. 1 x y表示x和y是同类,2 x y表示x吃y ...
随机推荐
- ML面试1000题系列(1-20)
本文总结ML面试常见的问题集 转载来源:https://blog.csdn.net/v_july_v/article/details/78121924 1.简要介绍SVM 全称是support vec ...
- [Vue CLI 3] 配置解析之 css.extract
大家还记得我们在老版本中,对于线上环境配置中会把所有的 css 多打成一个文件: 核心是使用了插件 extract-text-webpack-plugin,方式如下: 第一步都是加载插件 const ...
- Congratulation!顺利通过-2019年6月份的PMP考试
祝贺邮件 证书
- Leetcode697.Degree of an Array数组的度
给定一个非空且只包含非负数的整数数组 nums, 数组的度的定义是指数组里任一元素出现频数的最大值. 你的任务是找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度. 示例 1: 输入: [ ...
- List.Sort 排序用法收集
使用Lambda表达式,实现代码如下: private static void SortByLambda() { List<Article> list ...
- man命令及help命令
一.man命令 man命令常用工具命令 man命令是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助.配置文件帮助和编程帮助等信息. 语法: man(选项)(参数) 选项: -a: ...
- 第三十二讲:UML类图(下)
一个类能够看到另外一个类的属性和方法,那么这两个类是关联的.
- @Transactional注解事务
打了这个注解的类或者方法表示该类里面的所有方法或者这个方法的事务由spring处理,来保证事务的原子性,即方法里面对数据库操作,如果失败则spring负责回滚操作,成功提交操作 一.特性 1.serv ...
- vue_qqmapdemo1
腾讯地图vue组件,实现异步加载腾讯地图,坐标拾取器,支持按城市名称搜索. 搜索框样式依赖elementUI,不需要可删除顶部,地图部分无依赖项 //qqmap.vue <template> ...
- python已安装包的查看方法和requirements.text的使用
1.已经安装包的查看方法 命令pip freeze 2. 批量导出命令 pip freeze >requirements.txt 3. 批量导入命令 pip install -r requir ...