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 叶子的颜色的更多相关文章

  1. [CQOI2009] 叶子的颜色 解题报告(树形DP)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1304 Description 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为 ...

  2. 叶子的颜色---经典树上dp

    挺简单的一个dp #include<iostream> #include<cstring> #include<cstdio> #include<algorit ...

  3. 北京培训记day4

    智商题QAQ-- T1:求>=n的最小素数,n<=10^18 暴力枚举n-n+100,miller-rabin筛法 T2:给定一个01矩阵,每次选择一个1并将(x,y)到(1,1)颜色反转 ...

  4. [SinGuLaRiTy] 树形DP专项测试

    [SinGuLaRiTy-1015] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 对于所有的题目:Time Limit:1s  |  Me ...

  5. Selective Search for Object Recognition 论文笔记【图片目标分割】

    这篇笔记,仅仅是对选择性算法介绍一下原理性知识,不对公式进行推倒. 前言: 这篇论文介绍的是,如果快速的找到的可能是物体目标的区域,不像使用传统的滑动窗口来暴力进行区域识别.这里是使用算法从多个维度对 ...

  6. loj题目总览

    --DavidJing提供技术支持 现将今年7月份之前必须刷完的题目列举 完成度[23/34] [178/250] 第 1 章 贪心算法 √ [11/11] #10000 「一本通 1.1 例 1」活 ...

  7. POJ - 2777——Count Color(懒标记线段树二进制)

    Count Color Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 53639   Accepted: 16153 Des ...

  8. python-Beautiful rose

    热爱python,热爱生活,python需要浪漫,让我带大家走进浪漫的国度...写的不好的地方请大佬指教 import turtle import time class Rose: def __ini ...

  9. CSU训练分类

    √√第一部分 基础算法(#10023 除外) 第 1 章 贪心算法 √√#10000 「一本通 1.1 例 1」活动安排 √√#10001 「一本通 1.1 例 2」种树 √√#10002 「一本通 ...

随机推荐

  1. flowable流程启动时监听器

    一.核心配置类 package com.magus.project.flow.config; import com.google.common.collect.Maps; import com.mag ...

  2. [leetcode712]202. Happy Number判断快乐数字

    题目很简单,就是用哈希表存,判断有没有重复 学到了:java中字符串的比较有两种: 1.==这种是比较引用,只用两个字符串变量指向同一个地址才相等 2..equals()这种是值的比较,只要两个字符串 ...

  3. JavaScript获取页面元素方法

  4. java有关静态代理及动态代理的实现

    引言: 代理是基本的设计模式之一,它为你提供额外的或不同的操作而插入的用来代替实际对象的对象(委托对象).这些对象通常涉及到与实际对象的通信,因此代理通常充当中间人的角色.--JAVA编程思想 相关的 ...

  5. 【python接口自动化】- DDT数据驱动测试

    简单介绍 ​ DDT(Date Driver Test),所谓数据驱动测试,简单来说就是由数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变.通过使用数据驱动测试的方法,可以在需要验证多组数据 ...

  6. 用隧道协议实现不同dubbo集群间的透明通信

    用隧道协议实现不同dubbo集群间的透明通信 前言 笔者最近完成了一个非常有意思的隧道机制(已在产线运行),可以让注册到不同zookeeper之间的dubbo集群之间能够正常进行通信.如下图所示: 例 ...

  7. 利用Python下载:You-Get的安装及使用方法

    You-Get是一个非常优秀的网站视频下载工具.使用You-Get可以很轻松的下载到网络上的视频.图片及音乐. 1.打开这个网址https://www.python.org/ 下载并安装Python, ...

  8. java进阶(31)--TreeSet集合、TreeMap集合、自平衡二叉树

    一.TreeSet集合简单 1.TreeSet集合底层是一个TreeMap 2.TreeMap集合底层是一个二叉树 3.放到TreeSet集合的元素等同于放到TreeMap集合的Key部分 4.Tre ...

  9. TCP/IP协议栈在Linux内核中的运行时序分析

    网络程序设计调研报告 TCP/IP协议栈在Linux内核中的运行时序分析 姓名:柴浩宇 学号:SA20225105 班级:软设1班 2021年1月 调研要求 在深入理解Linux内核任务调度(中断处理 ...

  10. Mysql数据类型以及特性,,,防止SQL注入

    MyISAM.InnoDB.HEAP.BOB,ARCHIVE,CSV等 MyISAM:成熟.稳定.易于管理,快速读取.一些功能不支持(事务等),表级锁. InnoDB:支持事务.外键等特性.数据行锁定 ...