背景:
原题链接
上次七级两道题都是10分,总分55没过。这次终于做出这一道题,第二题消消乐0分,总分69分终于过了,写题解纪念一下。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
思路:
> GGG中恰好有nnn条边,说明GGG是一个或多个环,要使得任意一条边两端的结点都有不同的颜色且需要颜色最少,显然要按一定规则染色。
如果该环节点数为奇数,那么这样染色需要颜色最少:
最少要3\boxed{3}3 种颜色。
如果该环节点数为偶数,那么这样染色需要颜色最少:
最少要2\boxed{2}2 种颜色。
> 所以,综上所述,我们可以先把图按无向图用邻接表储存起来,再建立visvisvis数组,将节点从111到nnn遍历,如果没有访问过,就说明这是一个新的环,则用搜索遍历一遍整个环,并用cntcntcnt记录环的节点数,如果是奇数答案就是333,偶数就是222。由于可能不止一个环,所以无论333还是222答案都取最大值。将所有结点遍历过后,输出答案。
> 注意,由于GGG中有多个环,而且有TTT组数据,所以要用到多个visvisvis数组、邻接表和广搜遍历用的队列,但由于数据范围3≤n≤1053\leq n \leq10^53≤n≤105,所以不可能每次都开一个局部visvisvis数组、邻接表和队列,会MLE,所以每次用完后要初始化(队列每次为空才结束遍历,所以不用特殊处理,另外两个要)。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
代码:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
结语:
希望对大家学习OI有帮助!