求和某点关联的和这点颜色不同的颜色种数最多点的颜色,说起来有点绕口,但就是这个意思。用set求和这点关联点的颜色种数(set去重),即为edge[c[i]].size()。O(N)求最大值,记录颜色。这题唯一的好处就是学会了set。set里面的count调用还可以代替哈希表来判重,一次操作复杂度O(logn),是一个很灵活地东西。
引致:http://baike.baidu.com/view/4255961.htm
View Code
1 #include <set> 2 一个集合(set)是一个容器,它其中所包含的元素的值是唯一的。 3 4 如:set<int,less<int> > set1; 5 less<int>是一个标准类,用于形成升序排列函数对象。降序排列是用greater<int>。 6 7 begin() 返回指向第一个元素的迭代器 8 clear() 清除所有元素 9 count() 返回某个值元素的个数 10 empty() 如果集合为空,返回true(真) 11 end() 返回指向最后一个元素之后的迭代器,不是最后一个元素 12 equal_range() 返回集合中与给定值相等的上下限的两个迭代器 13 erase() 删除集合中的元素 14 find() 返回一个指向被查找到元素的迭代器 15 get_allocator() 返回集合的分配器 16 insert() 在集合中插入元素 17 lower_bound() 返回指向大于(或等于)某值的第一个元素的迭代器 18 key_comp() 返回一个用于元素间值比较的函数 19 max_size() 返回集合能容纳的元素的最大限值 20 rbegin() 返回指向集合中最后一个元素的反向迭代器 21 rend() 返回指向集合中第一个元素的反向迭代器 22 size() 集合中元素的数目 23 swap() 交换两个集合变量 24 upper_bound() 返回大于某个值元素的迭代器 25 value_comp() 返回一个用于比较元素间的值的函数