集合合并问题

题目: 小明有n只袜子,需要穿m天 第i只袜子的颜色为c_i 给出每天要穿的两只袜子的编号(i1,i2) 保证每天穿的袜子颜色一样,最少要对多少只袜子进行染色

思路: 根据这m天每天穿的两只袜子,可以将所有袜子分成几个集合,每个集合的颜色都要一样,把集合中所有袜子染成颜色最多的袜子即可 将每天穿的袜子标号看作集合,按袜子颜色进行合并,直到每个集合中袜子的标号都不重复 实现函数

def maxTint(c,d): """ c: n只袜子的颜色 d: m天每天穿的袜子的标号 """ pass

1,循环标号进行合并

def maxTint(c,d): d = map(set,d) for ci in range(len(c)): new_d = [] new_g = [] for di in d: if ci in di: new_g.append(di) else: new_d.append(di) d = new_d if len(new_g)!=0: d.append(set()) for gi in new_g: d[-1]=d[-1]|gi ans = 0 for di in d: ansi = 0 for i in di: ansi=max(ansi,c.count(c[i-1])) ans+=ansi return ans

时间复杂度:n*m