集合合并问题
题目: 小明有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