#3526. 学校社团的等级制度

学校社团的等级制度

题目背景

某学校有三个社团:围棋社(A)象棋社(B)书法社(C)

这三个社团之间有固定的“鄙视链”:

  • 围棋社的人 看不起 象棋社的人
  • 象棋社的人 看不起 书法社的人
  • 书法社的人 看不起 围棋社的人

(注意:鄙视关系不是相互的,比如围棋社看不起象棋社,但象棋社不一定看不起围棋社)

题目描述

学校里有 N 个学生,编号为 1 ~ N
每个学生分别属于这三个社团中的一个,但你不知道具体谁属于哪个社团。

有人根据学生之间的日常对话,记录下了 K 条关于社团关系的信息,每条信息有两种类型:

  • 类型 1X Y —— 表示学生 X 和学生 Y 属于同一个社团
  • 类型 2X Y —— 表示学生 X 看不起 学生 Y(即 X 的社团看不起 Y 的社团)

但这个人记录的有些信息可能是假的。一条信息是假的,当且仅当它满足以下任意一条

  1. 当前信息与前面所有真实信息冲突
  2. 信息中的学生编号 X 或 Y 超出了 1 ~ N 的范围
  3. 类型 2 的信息中,X 和 Y 是同一个学生(一个人不能看不起自己)

请你统计出这些信息中,假话的总数

输入格式

第一行两个整数 NK

接下来 K 行,每行三个整数 D, X, Y

  • D = 1,表示“X 和 Y 属于同一个社团”
  • D = 2,表示“X 看不起 Y”

输出格式

一个整数,表示假话的数量。

样例输入

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

样例输出

3

样例解释

序号 信息 真假 原因
1 1 101 1 学生101不存在(超过N=100)
2 2 1 2 1看不起2,暂时成立
3 2 2 3 2看不起3,暂时成立
4 2 3 3 自己看不起自己
5 1 1 3 与前面信息冲突(1看不起2,2看不起3,说明1和3不是同类)
6 2 3 1 3看不起1,形成循环鄙视链
7 1 5 5 同一个人肯定和自己同类

所以假话总数 = 3

数据范围

  • 1 ≤ N ≤ 50000
  • 0 ≤ K ≤ 100000
  • 1 ≤ D ≤ 2
  • 1 ≤ X, Y ≤ N

原题对照(方便你理解转换)

原食物链题目 新社团题目
A吃B,B吃C,C吃A 围棋社看不起象棋社,象棋社看不起书法社,书法社看不起围棋社
1 X Y 表示同类 1 X Y 表示同一社团
2 X Y 表示X吃Y 2 X Y 表示X看不起Y
X吃X是假话 自己看不起自己是假话
编号越界 学生编号越界
与前面冲突 与前面真实信息冲突