9718-宝石的颜色
本文总阅读量次
根据题目描述,这题是有向图,且是树结构,并在题目中说明了父节点和孩子节点,所以遍历的时候,记号都不需要做了,因为孩子节点肯定没被访问过。
然后,寻找颜色最多的宝石,可以方位到某个节点的时候,对该节点的宝石颜色(点权)进行计数,并立刻打擂台(这样处理就不会遗漏,也不用考虑是否是叶子节点)。
void dfs(int x)
{
cnt[c[x]]++; //宝石颜色计数
ans=max(ans,cnt[c[x]]); //寻找颜色最多的宝石
for(auto y:G[x]){
dfs(y);
}
cnt[c[x]]--;
}
两个地方需要注意:
- 颜色值最大为
,数组不能计数,需要用 容器。 - 当子树搜完后,要往回走,那么宝石颜色次数需要减少,因为要选择其他的路径去收集宝石了,当前路径不会经过,宝石自然要还回去。