题目描述

样例

输入:

6
1 2 2 1 5
2 1 1 1 1 1

输出

3

算法描述



思路

我们以样例为例讲讲思路。

如何确保dfs能顺利便利呢,我们可以使用链式前向星来存图(树)


C++代码

#include <iostream>                 //头文件
#include <cstring>
#include <algorithm> using namespace std; const int N=10010,M=20010; struct Edge //链式前向星
{
int to;
int next;
}e[M]; int head[N],idx; void add(int a,int b) //链式前向星加边
{
idx++;
e[idx].to=b;
e[idx].next=head[a];
head[a]=idx;
} int n;
int co[N]; //目标状态
int cco[N]; //当前状态
int cnt; //结果 void DFS(int u,int father) //深搜
{
if(co[u]==cco[father]) //已经被其父节点染过色且正确
{
cco[u]=co[u];
}
else //重新染色
{
cco[u]=co[u];
cnt++;
}
for(int i=head[u];i;i=e[i].next) //递推
{
if(e[i].to==father)continue;
int to=e[i].to;
DFS(to,u);
}
} int main()
{
cin>>n;
for(int i=2;i<=n;i++)
{
int fa;
cin>>fa;
add(i,fa);
add(fa,i);
}
for(int i=1;i<=n;i++)cin>>co[i];
cco[0]=0x80808080; //预处理
DFS(1,0);
cout<<cnt<<endl;
}

AcWing 4490. 染色题解的更多相关文章

  1. BZOJ 4033: [HAOI2015]树上染色题解

    BZOJ 4033: [HAOI2015]树上染色题解(树形dp) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327400 原题地址: BZOJ 403 ...

  2. BZOJ4033:[HAOI2015]树上染色——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4033 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将 ...

  3. BZOJ2243:[SDOI2011]染色——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2243 Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点 ...

  4. AcWing 860. 染色法判定二分图

    #include <cstring> #include <iostream> #include <algorithm> using namespace std; , ...

  5. BZOJ 2303: [Apio2011]方格染色 题解

    题目大意: 有n*m的方格,中间的数要么是1,要么是0,要求任意2*2的方格中的数异或和为1.已知一部分格子中的数,求合法的填数的方案数. 思路: 由题意得:a[i][j]^a[i][j+1]^a[i ...

  6. [SDOI2011]染色 题解

    题目大意: 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段) 思路: 树剖之后 ...

  7. Acwing P283 多边形 题解

    Analysis 总体来说是一个区间DP 此题首先是一个环,要你进行删边操作,剩下的在经过运算得到一个最大值 注意事项: 1.删去一条边,剩下的构成一条线,相当于求此的最大值,经典区间DP该有的样子: ...

  8. Acwing P284 金字塔 题解

    Analysis 一棵树的每颗子树都对应着这棵树 DFS 序的一个区间.本题的序列虽然不是 DFS 序列,但也有该性质.本题中,我们以区间长度作为阶段, F[ l , r ] 表示序列 s[ l ~ ...

  9. Acwing P277 饼干 题解

    每日一题 day20 打卡 Analysis 线型动态规划 读入每个人的贪婪度之后,对其按照从大到小的顺序排序,定义状态f[i][j]为前i个人(排序后)分j个饼干的答案,那么答案为f[n][m],考 ...

  10. AcWing P379 捉迷藏 题解

    Analysis 这道题因为我们要给能到达的两个点都连上,又由于n<=200,所以我们可以用n³的传递闭包来建边,再用匈牙利算法来求二分图最大点独立集. #include<iostream ...

随机推荐

  1. Semantic Kernel 入门系列:💾Native Function

    语义的归语义,语法的归语法. 基础定义 最基本的Native Function定义只需要在方法上添加 SKFunction 的特性即可. using Microsoft.SemanticKernel. ...

  2. Buffer中的public void write(Buffer source, long byteCount)解析

    这个把source缓冲区中的数据写到当前缓冲区的方法是比较经典的: if (source == null) throw new IllegalArgumentException("sourc ...

  3. Python tkinter 进度条代码

    1 import tkinter as tk 2 import time 3 4 # 创建主窗口 5 window = tk.Tk() 6 window.title('进度条') 7 window.g ...

  4. 5219. 【GDOI2018模拟7.10】B

    5219. [GDOI2018模拟7.10]B 题目大意: 考试想法: 正解: 代码: 题目大意: 现在有一个字符串 s s s 当 s [ i ] s[i] s[i]为 I I I时 a n s [ ...

  5. docker-compose一键部署java开源项目

    这一年干的很多事都是为了降低我的开源项目消息推送平台austin使用门槛. 如果想学Java项目的,强烈推荐我的开源项目消息推送平台Austin(8K stars) ,可以用作毕业设计,可以用作校招, ...

  6. Driver8833电机驱动模块的使用(STM32为主控)

    一.硬件 STM32C8T6.STLINK下载器 Driver8833:TI公司的DRV8833是双桥马达驱动器解决方案,包括有两个H桥驱动器,可驱动两个DC电刷马达,或一个步进马达, 螺线管和其它电 ...

  7. 浅谈如何使用 github.com/kardianos/service

    在实际开发过程中,有时候会遇到如何编写Go开机自启服务的需求,在linux中我们可以使用systemd来进行托管,windows下可以通过注册表来实现,mac下可以通过launchd来实现,上面的方式 ...

  8. \n 和 std::endl 的区别

    std::cout << std::endl; 等价于 std::cout << '\n' << std::flush; 除了写入换行符,std::endl 还会刷 ...

  9. 2022-04-17:给定一个数组arr,其中的值有可能正、负、0, 给定一个正数k。 返回累加和>=k的所有子数组中,最短的子数组长度。 来自字节跳动。力扣862。

    2022-04-17:给定一个数组arr,其中的值有可能正.负.0, 给定一个正数k. 返回累加和>=k的所有子数组中,最短的子数组长度. 来自字节跳动.力扣862. 答案2022-04-17: ...

  10. 2021-04-25:给定一个数组arr,和一个正数M,返回在arr的子数组在长度不超过M的情况下,求最大的累加和。

    福大大 答案2021-04-25: 前缀和+左大右小的双端队列.时间太晚了,所以写得简单. 代码用golang编写.代码如下: package main import ( "containe ...