#2012. 诈骗电话检测
诈骗电话检测
题目描述
电信诈骗是社会毒瘤。请你编写程序,实现一个较为简单的算法,从一天内的大量通话记录中自动筛查出诈骗团伙嫌疑人。
共有 个电话号码,编号为 。给出这一天的 条通话记录,每条记录包含:
- 呼出者
- 接收者
- 本次通话时长 (单位:分钟)
对于任意两个不同的电话号码 (即 ),定义:
- 若这一天内从 呼出到 的所有通话记录的总时长不超过 分钟,则称 是 的一个短通话对象。
- 若这一天内存在至少一条从 呼出到 的通话记录,则称 给 回过电话。
如果某个通话者 满足:
- 的短通话对象个数严格大于 ;
- 在这些短通话对象中,给 回过电话的人数不超过其短通话对象总数的 ;
则判定 为诈骗嫌疑人。
进一步地,在所有诈骗嫌疑人之间建立一个无向图。若两个诈骗嫌疑人 满足:
- 至少存在一条从 到 的通话记录;
- 且至少存在一条从 到 的通话记录;
则在 之间连一条无向边。该无向图的每一个连通块中的所有嫌疑人构成一个诈骗团伙。
请你找出所有疑似诈骗团伙。
输入格式
从标准输入按以下格式读取数据:
其中:
- 第一行输入三个整数 。
- 接下来 行,每行输入三个整数 ,表示一条通话记录:呼出者为 ,接收者为 ,本次通话时长为 分钟。
输出格式
如果存在疑似诈骗团伙,则每行输出一个团伙中所有成员的编号,要求:
- 同一行内按从小到大输出;
- 若有多个团伙,则按每个团伙中最小编号从小到大输出;
- 行内相邻两个数字之间用一个空格分隔,行首行末不得有多余空格。
如果不存在任何诈骗嫌疑人,则输出一行:
None
数据范围
说明
为避免歧义,特别说明如下:
- “给不同的人拨出超过 个短通话”中的“不同的人”指不同的电话号码,因此 不应把自己计入统计对象中。
- 对于同一对有向号码 ,一天内可能有多条通话记录。判断 是否为 的短通话对象时,应先把所有 的通话时长累加,再判断其总时长是否不超过 。
- “给他回电话”只要求存在至少一条 的通话记录,对回拨通话的时长没有要求。
- 条件“回拨人数不超过短通话对象总数的 ”可等价理解为:
- “两个嫌疑人之间互相有通话”指两个方向的通话记录都至少出现过一次。
- 诈骗团伙按嫌疑人互通关系构成的无向图的连通块来定义,而不是仅按两两直接互通来定义。
样例
5 15 31
1 4 2
1 5 2
1 5 4
1 7 5
1 8 3
1 9 1
1 6 5
1 15 2
1 15 5
3 2 2
3 5 15
3 13 1
3 12 1
3 14 1
3 10 2
3 11 5
5 2 1
5 3 10
5 1 1
5 7 2
5 6 1
5 13 4
5 15 1
11 10 5
12 14 1
6 1 1
6 9 2
6 10 5
6 11 2
6 12 1
6 13 1
3 5
6
5 7 8
1 2 1
1 3 1
1 4 1
1 5 1
1 6 1
1 7 1
2 1 1
3 1 1
None