def find(x): if bcj.get(x) == None: bcj[x] = x if bcj[x] == x: return x return find(bcj[x]) def union(x, y): x = find(x) y = find(y) if x != y: if x > y: bcj[x] = y else: bcj[y] = x n = int(input()) bcj = {} member = {} housecount = {} areasize = {} for i in range(n): a = input().split(" ") people = [] me = a[0] father = a[1] mother = a[2] children = a[4:-2] house = a[-2] area = a[-1] people.append(me) people.append(mother) people.append(father) people.extend(children) people = set(people) people.discard("-1") housecount[me] = house areasize[me] = area for i in people: union(i, me) for i in bcj: root = find(i) if member.get(root) == None: member[root] = 1 else: member[root] += 1 houses = {} for i in housecount: root = find(i) housecount[i] = int(housecount[i]) if houses.get(root) == None: houses[root] = housecount[i] else: houses[root] += housecount[i] for i in houses: houses[i] = houses[i] / member[i] areasizes = {} for i in areasize: root = find(i) areasize[i] = int(areasize[i]) if areasizes.get(root) == None: areasizes[root] = areasize[i] else: areasizes[root] += areasize[i] for i in areasizes: areasizes[i] = areasizes[i] / member[i] outcome = [] for i in member.keys(): p = [] p.append(i) p.append(member[i]) p.append(houses[i]) p.append(areasizes[i]) outcome.append(p) long = len(member) for i in range(long - 1): for j in range(long - i - 1): if outcome[j][3] < outcome[j + 1][3] or outcome[j][3] == outcome[j + 1][3] and outcome[j][0] > outcome[j + 1][0]: temp = outcome[j] outcome[j] = outcome[j + 1] outcome[j + 1] = temp print(len(member)) for i in outcome: a = i print(a[0], end=" ") print(a[1], end=" ") print("%.3f" % a[2], end=" ") print("%.3f" % a[3])
家庭房产并查集python
于 2022-08-02 22:13:38 首次发布