传送门:

http://poj.org/problem?id=1182

食物链
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 90562   Accepted: 27216

Description

动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。
现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。

有人用两种说法对这N个动物所构成的食物链关系进行描述:

第一种说法是"1 X Y",表示X和Y是同类。

第二种说法是"2 X Y",表示X吃Y。

此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。

1) 当前的话与前面的某些真的话冲突,就是假话;

2) 当前的话中X或Y比N大,就是假话;

3) 当前的话表示X吃X,就是假话。

你的任务是根据给定的N(1 <= N <= 50,000)和K句话(0 <= K <= 100,000),输出假话的总数。

Input

第一行是两个整数N和K,以一个空格分隔。

以下K行每行是三个正整数 D,X,Y,两数之间用一个空格隔开,其中D表示说法的种类。

若D=1,则表示X和Y是同类。

若D=2,则表示X吃Y。

Output

只有一个整数,表示假话的数目。

Sample Input

100 7
1 101 1
2 1 2
2 2 3
2 3 3
1 1 3
2 3 1
1 5 5

Sample Output

3

Source

 
分析:
code:
#include <iostream>
#include<algorithm>
#include <cstdio>
#include<cstring>
#include<math.h>
#include<memory>
using namespace std;
typedef long long LL;
#define max_v 50010
int sum;
struct node
{
int pre;//前驱
int relation;//和前驱的关系
//p[i].relation表示i的根结点到i的偏移量
}p[max_v];
void make_set(int x)
{
p[x].pre=x;//前驱默认自己
p[x].relation=;//关系默认0
}
int find_set(int x)
{
int temp;
if(x==p[x].pre)
return x;
temp=p[x].pre;
p[x].pre=find_set(temp);
p[x].relation=(p[x].relation+p[temp].relation)%;
return p[x].pre;
}
void union_set(int a,int b,int k)
{
int root1=find_set(a);
int root2=find_set(b);
if(root1==root2)
{
if(k==&&p[a].relation!=p[b].relation)
sum++;
if((k==)&&((-p[a].relation+p[b].relation)%!=k-))
sum++;
return ;
} //合并
p[root2].pre=root1;
p[root2].relation=((k-)++p[a].relation-p[b].relation)%;
}
int main()
{
int n,m,a,b,k;
scanf("%d %d",&n,&m); sum=;//假话数目 for(int i=;i<=n;i++)
make_set(i);
for(int i=;i<m;i++)
{
scanf("%d %d %d",&k,&a,&b);
if(a>n||b>n)//假话
{
sum++;
continue;
}
if(k==&&a==b)//假话
{
sum++;
continue;
}
union_set(a,b,k);//判断当前话是否跟前面说过的话冲突
}
printf("%d\n",sum);
return ;
}
 

POJ 1182 食物链(经典带权并查集 向量思维模式 很重要)的更多相关文章

  1. POJ 1182 食物链 【带权并查集】

    <题目链接> 题目大意: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我 ...

  2. POJ 1182 食物链 (带权并查集)

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

  3. POJ 1182 食物链 【带权并查集/补集法】

    动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种.有人用两种说 ...

  4. poj 1182 食物链【带权并查集】

    设相等的边权为0,吃的边权为,被吃的边权为2,然后用带权并查集在%3的意义下做加法即可 关系为简单环的基本都可以用模环长的方式是用带权并查集 #include<iostream> #inc ...

  5. POJ 1182 食物链(带权并查集)

    传送门 食物链  Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 65579   Accepted: 19336 Descri ...

  6. POJ:1182 食物链(带权并查集)

    http://poj.org/problem?id=1182 Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1 ...

  7. poj1182食物链,经典带权并查集

    动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有人用两种 ...

  8. POJ 1984 Navigation Nightmare 【经典带权并查集】

    任意门:http://poj.org/problem?id=1984 Navigation Nightmare Time Limit: 2000MS   Memory Limit: 30000K To ...

  9. poj1182 食物链(带权并查集)

    题目链接 http://poj.org/problem?id=1182 思路 前面做的带权并查集的权值记录该结点与其父结点是否是同一类,只有两种取值情况(0,1),在这题中某结点a和其父结点b的取值共 ...

随机推荐

  1. SSH文件上传代码片段

    一.文件上传限制: 在web.xml中配置Struts前端控制器时,设置初始化参数:如下图所示 二.controller代码 @Namespace("/") @ParentPack ...

  2. Linux上把新磁盘扩展到已有分区中(基于LVM)

    0.在不重启服务器的前提下找到新加的磁盘 --查看主机总线号 ls /sys/class/scsi_host/ --根据查询结果生成刷新磁盘语句 echo "- - -" > ...

  3. csharp: 图片字符间距

    引用WINDOWS API: [DllImport("gdi32.dll", CharSet = CharSet.Auto)] public static extern int S ...

  4. java 自定义 LRU(最近最少使用)策略 实现 缓存机制

    1. java提供了一个简单的方式实现LRU:  LinkedHashMap   2. 自定义实现 LRU至少需要两个主要操作: 添加(add)和搜索(search) public class LRU ...

  5. 代码积累-Common

    新建Common类库 /// <summary> /// string的扩展 /// </summary> public static class StringExt { // ...

  6. Java设计模式—状态模式

    状态模式又是一个比较难的设计模式 定义如下: 当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类. 个人理解:通俗的讲,状态模式就是状态的改变引起了行为的改变,但是,我们只能看到行为的 ...

  7. React 入门实例教程[阮一峰的网络日志] (分享)

    作者: 阮一峰 https://github.com/ruanyf/react-demos 转自:http://www.ruanyifeng.com/blog/2015/03/react.html 对 ...

  8. sql处理百万级以上的数据提高查询速度的方法

    原文:http://blog.csdn.net/zhengyiluan/article/details/51671599 处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中 ...

  9. WinAPI: WinExec - 运行外部程序

    原文:http://www.cnblogs.com/del/archive/2008/02/13/1067871.html //声明 WinExec(   lpCmdLine: LPCSTR; {文件 ...

  10. netstat统计

    状态统计 netstat -ant | awk '/tcp/ {print $6}'|sort |uniq -c |sort -nr 前十位ESTABLISHED状态ip统计 netstat -ant ...