loj10161 叶子的颜色
CQOI 2009
给一棵有 mm 个节点的无根树,你可以选择一个度数大于 11 的节点作为根,然后给一些节点(根、内部节点、叶子均可)着以黑色或白色。你的着色方案应保证根节点到各叶子节点的简单路径上都包含一个有色节点,哪怕是叶子本身。
对于每个叶子节点 uu,定义 c_ucu 为从根节点到 uu 的简单路径上最后一个有色节点的颜色。给出每个 c_ucu 的值,设计着色方案使得着色节点的个数尽量少。
输入格式
第一行包括两个数 m,nm,n,依次表示节点总数和叶子个数,节点编号依次为 11 至 mm。
接下来 nn 行每行一个 00 或 11 的数,其中 00 表示黑色,11 表示白色,依次为 c_1,c_2,\cdots ,c_nc1,c2,⋯,cn 的值。
接下来 m-1m−1 行每行两个整数 a,ba,b,表示节点 aa 与 bb 有边相连。
输出格式
输出仅一个数,表示着色节点数的最小值。
样例
样例输入
5 3
0
1
0
1 4
2 5
4 5
3 5
样例输出
2
——————————————————————————————————————————————————————
树形动归
f[u][0]表示u点染成白色时总共要染多少个点
f[u][1]表示u点染成黑色时总共要染多少个点
f[u][0]=sum( min( f[v][0]-1,f[v][1] ) )+1
f[u][1]=sum( min( f[v][1]-1,f[v][0] ) )+1
——————————————————————————————————————————————————————
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=10010;
4 int n,m;
5 int tj[maxn][2];
6 struct edge
7 {
8 int u,v,nxt;
9 }e[maxn<<1];
10 int head[maxn],js;
11 void addage(int u,int v)
12 {
13 e[++js].u=u;e[js].v=v;
14 e[js].nxt=head[u];head[u]=js;
15 }
16 void dfs(int u,int fa)
17 {
18 for(int i=head[u];i;i=e[i].nxt)
19 {
20 int v=e[i].v;
21 if(v!=fa)
22 {
23 dfs(v,u);
24 tj[u][0]+=min(tj[v][0]-1,tj[v][1]);
25 tj[u][1]+=min(tj[v][1]-1,tj[v][0]);
26 }
27 }
28 }
29 int main()
30 {
31 scanf("%d%d",&m,&n);
32 for(int x,i=1;i<=n;++i)
33 {
34 scanf("%d",&x);
35 tj[i][x]=1;
36 tj[i][x^1]=10000000;
37 }
38 for(int i=n+1;i<=m;++i)tj[i][0]=tj[i][1]=1;
39 for(int u,v,i=1;i<m;++i)
40 {
41 scanf("%d%d",&u,&v);
42 addage(u,v);addage(v,u);
43 }
44 dfs(m,0);
45 cout<<min(tj[m][0],tj[m][1]);
46 return 0;
47 }
loj10161 叶子的颜色的更多相关文章
- [CQOI2009] 叶子的颜色 解题报告(树形DP)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1304 Description 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为 ...
- 叶子的颜色---经典树上dp
挺简单的一个dp #include<iostream> #include<cstring> #include<cstdio> #include<algorit ...
- 北京培训记day4
智商题QAQ-- T1:求>=n的最小素数,n<=10^18 暴力枚举n-n+100,miller-rabin筛法 T2:给定一个01矩阵,每次选择一个1并将(x,y)到(1,1)颜色反转 ...
- [SinGuLaRiTy] 树形DP专项测试
[SinGuLaRiTy-1015] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 对于所有的题目:Time Limit:1s | Me ...
- Selective Search for Object Recognition 论文笔记【图片目标分割】
这篇笔记,仅仅是对选择性算法介绍一下原理性知识,不对公式进行推倒. 前言: 这篇论文介绍的是,如果快速的找到的可能是物体目标的区域,不像使用传统的滑动窗口来暴力进行区域识别.这里是使用算法从多个维度对 ...
- loj题目总览
--DavidJing提供技术支持 现将今年7月份之前必须刷完的题目列举 完成度[23/34] [178/250] 第 1 章 贪心算法 √ [11/11] #10000 「一本通 1.1 例 1」活 ...
- POJ - 2777——Count Color(懒标记线段树二进制)
Count Color Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 53639 Accepted: 16153 Des ...
- python-Beautiful rose
热爱python,热爱生活,python需要浪漫,让我带大家走进浪漫的国度...写的不好的地方请大佬指教 import turtle import time class Rose: def __ini ...
- CSU训练分类
√√第一部分 基础算法(#10023 除外) 第 1 章 贪心算法 √√#10000 「一本通 1.1 例 1」活动安排 √√#10001 「一本通 1.1 例 2」种树 √√#10002 「一本通 ...
随机推荐
- ESP8288-01S/ESP8288-01使用经验总结
如图:ESP8288-01S/ESP8288-01的区别 超链接 ESP8288-01S/ESP8288-01是乐鑫公司推出的Wi-Fi模块,因为价格便宜迅速占领了市场,它可以做AT指令开发,也可以做 ...
- 远程控制卡 使用ipmitools设置ipmi
远程控制卡 使用ipmitools设置ipmi 使用DELL的远程控制卡可以方便的管理服务器 在CentOS中可以使用ipmitools管理 IPMI( Intelligent Platform Ma ...
- 伯俊BOS2.0店铺收入对账功能设计
一.客户需求 通过导入银行POS机流水,将流水与ERP系统的零售付款数据进行对比,统计差异! 二.功能设计 1.新增"POS机号对应表单",用于维护POS机与erp店仓对应 2.新 ...
- 腾讯IOT安卓开发初探
目录 腾讯IOT 安卓开发初探 Tecent IOT 开发平台的使用 新建项目 创建产品 添加自定义功能 设备开发 微信小程序配置 面板配置 新建设备 使用设备 安卓开发 前置配置 data.json ...
- linux下安装docker容器
1.安装环境 此处在Centos7进行安装,可以使用以下命令查看CentOS版本 lsb_release -a 在 CentOS 7安装docker要求系统为64位.系统内核版本为 3.10 以上,可 ...
- ios iphone 崩溃字符记录
如题,近日iphone被爆出有一串字符可引发系统错误 (بٍٍٍٍََُُُِّّّْرٍٍٍٍََُُِِّّّْآٍٍٍَُّ بٍٍٍٍََُُُِّّّْرٍٍٍٍََُُِِّّّْآٍٍٍ ...
- 机器学习笔记·adaboost
一.算法简介 Adaboost算法是一种集成算法,所谓集成算法就是将多个弱的分类器组合在一起变成一个强的分类器.弱分类器通常是指分类效果比随机分类稍微好一点的分类器.就像我们在做一个重要决定的时候,通 ...
- Ansible-playbook 安装redis
Ansible-playbook 安装redis 创建目录: ### 创建剧本规范目录: mkdir -p /etc/ansible/roles/redis/{files,templates,vars ...
- windows鼠标右键添加快捷方式
[win]+[R] 输入regedit 打开路径:计算机\HKEY_CLASSES_ROOT\DesktopBackground\Shell 创建应用文件,这里以putty为例 右键 Shell 新建 ...
- LeetCode872. 叶子相似的树
题目 1 class Solution { 2 public: 3 vector<int>ans1; 4 vector<int>ans2; 5 bool leafSimilar ...