Skip to content

06901: 话题焦点人物

http://cs101.openjudge.cn/practice/06901/

微博提供了一种便捷的交流平台。一条微博中,可以提及其它用户。例如Lee发出一条微博为:“期末考试顺利 @Kim @Neo”,则Lee提及了Kim和Neo两位用户。

我们收集了N(1 < N < 10000)条微博,并已将其中的用户名提取出来,用小于等于100的正整数表示。

通过分析这些数据,我们希望发现大家的话题焦点人物,即被提及最多的人(题目保证这样的人有且只有一个),并找出那些提及它的人。

输入

输入共两部分: 第一部分是微博数量N,1 < N < 10000。 第二部分是N条微博,每条微博占一行,表示为: 发送者序号a,提及人数k(0 < = k < = 20),然后是k个被提及者序号b1,b2...bk; 其中a和b1,b2...bk均为大于0小于等于100的整数。相邻两个整数之间用单个空格分隔。

输出

输出分两行: 第一行是被提及最多的人的序号; 第二行是提及它的人的序号,从小到大输出,相邻两个数之间用单个空格分隔。同一个序号只输出一次。

样例输入

5
1 2 3 4
1 0
90 3 1 2 4
4 2 3 2
2 1 3

样例输出

3
1 2 4

来源

医学部计算概论2011年期末考试(谢佳亮)

python
def find_topic_center_and_mentioners():
    n = int(input())
    mention_count = {}  # 记录每个人被提及的次数
    mention_relations = {}  # 记录提及关系,key为提及的人,value为提及的人的集合
    
    for _ in range(n):
        tweet = input().split()
        sender, k = int(tweet[0]), int(tweet[1])
        if k > 0:
            mentioned = list(map(int, tweet[2:]))
            for person in mentioned:
                if person not in mention_count:
                    mention_count[person] = 1
                    mention_relations[person] = set([sender])
                else:
                    mention_count[person] += 1
                    mention_relations[person].add(sender)
    
    # 找到被提及最多的人
    topic_center = max(mention_count, key=mention_count.get)
    
    # 输出结果
    print(topic_center)
    print(' '.join(map(str, sorted(mention_relations[topic_center]))))

# 调用函数处理输入数据
find_topic_center_and_mentioners()