白駿#4195友達ネットワーク


1.質問


https://www.acmicpc.net/problem/4195
  • Mendium/hash、集合、グラフ/50分cut

  • 2.私の回答


    問題から理解できない...
    問題が発生しました!
    思ったより簡単に・・・どうして難しいと思いますか.それなら.
    AとBのすべての友達の数量(xを繰り返すことを許す)の問題を求めます
    答えは見つかるが、時間が過ぎた.ううう
    import sys
    
    
    case_count = int(sys.stdin.readline().rstrip())
    
    for c in range(case_count):
        network_count = int(sys.stdin.readline().rstrip())
        networks = {}
        for n in range(network_count):
            a, b = sys.stdin.readline().split()
            a_group = networks.get(a) if networks.get(a) else [a, b]
            b_group = networks.get(b) if networks.get(b) else [b, a]
            new_group = list(set(a_group + b_group))
    
            networks[a] = new_group
            networks[b] = new_group
            print(len(new_group))

    3.他人の回答

    def find(x):
        if x == parent[x]:
            return x
        else:
            p = find(parent[x])
            parent[x] = p
            return parent[x]
    
    
    def union(x, y):
        x = find(x)
        y = find(y)
    
        if x != y:
            parent[y] = x
            number[x] += number[y]
    
    
    test_case = int(input())
    
    for _ in range(test_case):
        parent = dict()
        number = dict()
    
        f = int(input())
    
        for _ in range(f):
            x, y = input().split(' ')
    
            if x not in parent:
                parent[x] = x
                number[x] = 1
            if y not in parent:
                parent[y] = y
                number[y] = 1
    
            union(x, y)
            print(number[find(x)])

    4.感じ