3470: 易爆物-【2014暑期训练】T2Day2T3

内存限制:256 MB 时间限制:1 S
题面:传统 评测方式:文本比较 上传者:
提交:6 通过:2

题目描述

易爆物

【问题描述】

有一些简单化合物,每个化合物由2种不同元素组成(每一个元素用一个正整数表示)。假设你是一个搬运工,你按照顺序依次将一些化合物放进车里,但是如果车上存在k个简单化合物且正好包含K种元素的话,那么他们将变成易爆的混合物。为安全起见,每当你拿到一个化合物的时候,如果它和已装车的化合物形成易爆混合物,你就应当拒绝装车,否则就应该装车。

请输出有多少个化合物没有装车。

【文件输入】

输入文件plosives.in。

输入包含若干行(最多可能10^5行),每行为两个不同的整数a,b,(0<=a,b<=10^5)代表一个由元素a和b组成的简单化合物,所有简单化合物按照交给你的先后顺序排列。

【文件输出】

输出文件plosives.out。

输出没有装出的化合物的个数。

【输入样例】

1 2

1 3

2 4

2 5

3 5

2 3

3 6

【输出样例】

2

数据范围与提示

易爆物LA3644 X-Plosives 并查集(维护连通分量,判断有无环)

白书P191

一个元素当做一个节点,一个物品由两个节点之间的一条边(因为一个物品由2个元素组成),让元素相连产生一个环的时候会产生危险

现在给我们很多个物品,要我们输出剔除多少个物品,能够保证安全

做法:用并查集维护一个图的连通分量几个,每次得到化合物(x,y)时,检查x和y是否在一个集合中,如果是则需要拒绝当前化合物,(因为x,y在一个连通分量中,此时图尚不存在环,可以说是一棵树,但当边x-y加入到该连通分量的时候显然就产生了一个环)。

路径压缩优化、按秩顺序合并,请查资料。