9718-宝石的颜色


本文总阅读量

根据题目描述,这题是有向图,且是树结构,并在题目中说明了父节点和孩子节点,所以遍历的时候,记号都不需要做了,因为孩子节点肯定没被访问过。
然后,寻找颜色最多的宝石,可以方位到某个节点的时候,对该节点的宝石颜色(点权)进行计数,并立刻打擂台(这样处理就不会遗漏,也不用考虑是否是叶子节点)。

void dfs(int x)
{
	cnt[c[x]]++;  //宝石颜色计数
	ans=max(ans,cnt[c[x]]); //寻找颜色最多的宝石
	for(auto y:G[x]){
		dfs(y);
	}
	cnt[c[x]]--;
}

两个地方需要注意:

  1. 颜色值最大为109,数组不能计数,需要用map容器。
  2. 当子树搜完后,要往回走,那么宝石颜色次数需要减少,因为要选择其他的路径去收集宝石了,当前路径不会经过,宝石自然要还回去。

本站总访问量