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 有边相连。

输出格式

输出仅一个数,表示着色节点数的最小值。

样例

样例输入

  1. 5 3
  2. 0
  3. 1
  4. 0
  5. 1 4
  6. 2 5
  7. 4 5
  8. 3 5

样例输出

  1. 2

    ——————————————————————————————————————————————————————
    树形动归
    f[u][0]表示u点染成白色时总共要染多少个点
  1. f[u][1]表示u点染成黑色时总共要染多少个点
  1. f[u][0]=sum( min( f[v][0]-1,f[v][1] ) )+1
  1. f[u][1]=sum( min( f[v][1]-1,f[v][0] ) )+1

  1. ——————————————————————————————————————————————————————

  1. 1 #include<bits/stdc++.h>
  2. 2 using namespace std;
  3. 3 const int maxn=10010;
  4. 4 int n,m;
  5. 5 int tj[maxn][2];
  6. 6 struct edge
  7. 7 {
  8. 8 int u,v,nxt;
  9. 9 }e[maxn<<1];
  10. 10 int head[maxn],js;
  11. 11 void addage(int u,int v)
  12. 12 {
  13. 13 e[++js].u=u;e[js].v=v;
  14. 14 e[js].nxt=head[u];head[u]=js;
  15. 15 }
  16. 16 void dfs(int u,int fa)
  17. 17 {
  18. 18 for(int i=head[u];i;i=e[i].nxt)
  19. 19 {
  20. 20 int v=e[i].v;
  21. 21 if(v!=fa)
  22. 22 {
  23. 23 dfs(v,u);
  24. 24 tj[u][0]+=min(tj[v][0]-1,tj[v][1]);
  25. 25 tj[u][1]+=min(tj[v][1]-1,tj[v][0]);
  26. 26 }
  27. 27 }
  28. 28 }
  29. 29 int main()
  30. 30 {
  31. 31 scanf("%d%d",&m,&n);
  32. 32 for(int x,i=1;i<=n;++i)
  33. 33 {
  34. 34 scanf("%d",&x);
  35. 35 tj[i][x]=1;
  36. 36 tj[i][x^1]=10000000;
  37. 37 }
  38. 38 for(int i=n+1;i<=m;++i)tj[i][0]=tj[i][1]=1;
  39. 39 for(int u,v,i=1;i<m;++i)
  40. 40 {
  41. 41 scanf("%d%d",&u,&v);
  42. 42 addage(u,v);addage(v,u);
  43. 43 }
  44. 44 dfs(m,0);
  45. 45 cout<<min(tj[m][0],tj[m][1]);
  46. 46 return 0;
  47. 47 }
  1.  

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. 手把手教你实现自定义Spring Boot的 Starter

    引言 上篇文章<天天用SpringBoot,它的自动装配原理却说不出来>我们有说springBoot的自动装配怎么实现的(建议最好先看下篇文章,因为前后有关系),这篇文章的话我们就自己来实 ...

  2. Git 常用命令 【13个命令包含git 90%的操作】

  3. 漫谈JSON Web Token(JWT)

    一.背景 传统的单体应用基于cookie-session的身份验证流程一般是这样的: 用户向服务器发送账户和密码. 服务器验证账号密码成功后,相关数据(用户角色.登录时间等)都保存到当前会话中. 服务 ...

  4. uniapp H5引入腾讯地图

    在网上搜索了许多关于uniapp引入腾讯地图的方法都以失败告终,我开发的应用主要使用于H5,小程序与H5是不同的sdk,就不在这说了,况且小程序有手把手教学,可参考腾讯地图官网https://lbs. ...

  5. “You may need an appropriate loader to handle this file type”

    这里不能为空!!!!!!!!!!!!!!!!!!!!

  6. Beta冲刺——第八天

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1 这个作业要求在哪里 https://edu.cnblogs.com/campus/fz ...

  7. CPU性能测试——CoreMark篇

    本文将介绍使用CoreMark测试程序对我们小组自研芯片进行性能的测试,记录了CoreMarK工具的使用以及对其测试结果进行分析 测试环境: PC OS: Ubuntu20.04 LTS CPU: 自 ...

  8. B树与B+树区别辨析

    我们都知道,innodb中的索引结构使用的是B+树.B+树是一种B树的变形树,而B树又是来源于平衡二叉树.相较于平衡二叉树,B树更适合磁盘场景下文件索引系统.那为什么B树更适合磁盘场景,B+树又在B树 ...

  9. #1使用html+css+js制作网站教程 准备

    #1使用html+css+js制作网站教程 准备 本系列链接 0 准备 0.1 IDE编辑软件 0.2 浏览器 0.3 基础概念 0.3.1 html 0.3.2 css 0.3.3 js 0.4 文 ...

  10. 查找linux系统下的端口被占用进程的两种方法 【转】

    在linux下开发时,你的软件可能要使用某一个端口,或者想查找某一个端口是否被占用.需要怎么做呢??这的确是一个比较烦恼的问题,我也此为这个苦恼过.但是通过查找man手册,还是同事的交流.总结出来两种 ...