zoukankan      html  css  js  c++  java
  • Openjudge 百练第4109题

    OpenJudge看到一个题目(#4109),题目描述如下:

    小明和小红去参加party。会场中总共有n个人,这些人中有的是朋友关系,有的则相互不认识。朋友关系是相互的,即如果A是B的朋友,那么B也是A的朋友。小明和小红想知道其中某两个人有多少个公共的朋友。 

    输入第一行为一个正整数c,代表测试数据的个数。接下来是c组测试数据。


    对于每组测试数据,第一行是三个数字n(2<=n<=100),m和k,分别表示会场中的人数,已知的朋友关系数目,问题的数目。接下来的m行,每行用两个数字i和j(1<=i,j<=n)表示了一个朋友关系,表示第i个人和第j个人是朋友关系。接下来的k行,每行用两个数字i和j(1<=i,j<=n)表示一个问题,请问第i个人和第j个人有多少公共的朋友。输出对于第i组测试数据,首先输出一行”Case i:”,接下来得k行代表了k个问题,每行输出第i个人和第j个人有多少公共的朋友。

    用Python写了段代码,大致实现:

     1  # -*- coding:utf-8 -*-
     2   
     3  def set_1(i, q):
     4      ''' generate a i*i ARRAY for all relationships
     5      if there is a relation set 1 or 0
     6      return i*i ARRAY with 1 or 0
     7      '''
     8      a = [0 for i in range(i*i)] 
     9      for j in range(len(q)):
    10         n, m = q[j]
    11         a[(n-1)*i+(m-1)] = 1
    12         a[(m-1)*i+(n-1)] = 1
    13      return a 
    14      
    15 def solve(i, q, r):
    16     ''' solve question
    17     i is the number of people 
    18     q is the set of questions
    19     r is the set of relationships, the result of function set_1(); 
    20     '''
    21     result = 0
    22     for j in range(len(r)):
    23         n, m = r[j]
    24         for l in range(i):
    25             if q[(n-1)*i+l] == 1 and q[(m-1)*i+l] == 1:
    26                 result += 1
    27         print(result)
    28         result = 0
    29          
    30 def main():
    31     d = [ 3, [3,2,2],
    32              [1,3],
    33              [2,3],
    34              [1,2],
    35              [1,3],
    36              [4,3,2],
    37              [1,2],
    38              [2,3],
    39              [1,4],
    40              [2,4],
    41              [1,3],
    42              [5,2,1],
    43              [1,2],
    44              [1,4],
    45              [3,4]
    46         ]
    47     for x in d:                         #Dispaly input 
    48         print(x)
    49      
    50         loc = []
    51         for m in range(1,len(d)):           #Get the index of every question  
    52             if len(d[m])==3:
    53                 loc.append(m)
    54 
    55         for i in range(len(loc)):           #Sovle each question
    56             pNum, qNum, aNum = d[loc[i]]    #slice out R and Q in d[]
    57             t = loc[i]+1
    58             R = d[t:t+qNum]
    59             Q = d[t+qNum:t+qNum+aNum]       
    60 
    61             r_1 = set_1(pNum,R)             # set 1 for question
    62             print('-------------------
    Case'+str(i+1)+':')
    63             solve(pNum, r_1, Q)
    64     if __name__=='__main__':
    65         main()
    66 
    67 '''OUTPUT
    68 3
    69 [3, 2, 2]
    70 [1, 3]
    71 [2, 3]
    72 [1, 2]
    73 [1, 3]
    74 [4, 3, 2]
    75 [1, 2]
    76 [2, 3]
    77 [1, 4]
    78 [2, 4]
    79 [1, 3]
    80 [5, 2, 1]
    81 [1, 2]
    82 [1, 4]
    View Code
  • 相关阅读:
    spring读取properties配置文件
    WxCpMessageRouter SpringContextHolder
    Maven和Spring mvc下的页面的跳转与取值
    struts2里UI页面标签
    Struts2中集合收集表单数据
    struts2的集合标签
    Struts2的通用标签(数据标签和控制标签)
    多个XML文件的包含与继承关系
    当出现异常时跳转到指定页面
    关于Struts2的动态URL和动态参数
  • 原文地址:https://www.cnblogs.com/py520ziyi/p/5542065.html
Copyright © 2011-2022 走看看