#Lutece3367. 三维模型
三维模型
Description
四汪是一名游戏开发者,他在处理三维模型时遇到了一些问题,于是来找作为算法大佬的你求助。
在游戏引擎中,三维模型通常是由三角形组成的,这种表示方法被称为三角形网格(triangle mesh)。三角形网格之所以被广泛使用,是因为它具有简单性、稳定性、易于渲染、易于建模、易于处理等特点。三角形网格通常通过顶点数据和索引数据两部分来存储,其中顶点数据包含了构成三维模型的所有顶点的信息,包括顶点的索引值以及空间坐标;而索引数据用于描述三角形,每个三角形由三个整数表示其三个顶点在顶点数据中的索引。例如,对于下图中的三维模型,其顶点数据和索引数据分别如下。
顶点数据:
索引 | 坐标 |
---|---|
1001 | |
1002 | |
1003 | |
1004 |
索引数据:
我们认为两个三角形是相连的,当且仅当这两个三角形有一条公共边,即这两个三角形的索引数据中有两个点是相同的。只有当两个三角形相连时,我们认为这两个三角形属于同一个三维模型。如果不满足上述条件,即使这两个三角形在空间中是相交的,我们也不认为他们属于同一个三维模型。注意,同一条边可以被不止两个三角形共用,并且三维模型不一定必须是一个闭合的多面体。
从上述定义中不难看出,判断两个三角形是否属于同一个三维模型只与其索引数据有关,与其顶点数据并没有关系。现给出 个三角形的索引数据,请求出一共有多少个不同的三维模型,并给出每个模型包含的三角形个数。
Input
第一行一个整数 (),表示测试数据组数。
每组测试数据第一行一个整数 (),表示三角形的个数。
接下来 行,每行三个空格隔开的不同的整数,表示三角形三个顶点的索引值,每个数在 的范围内。数据保证不会出现完全相同的三角形。
所有测试数据的 总和 。
Output
对于每组测试数据,第一行输出一共有多少个不同的三维模型,第二行按从小到大的顺序输出每个模型包含的三角形个数。
Samples
1
7
1001 1002 1003
1001 1002 1004
1001 1003 1004
1002 1003 1004
1006 1005 1001
1006 1005 1002
1006 1005 1003
2
3 4
Resources
The 21st UESTC Programming Contest Preliminary