problem

有一个n个节点n-1条边组成的树。
每个点看成一个人,连接u和v的边看成是“中意关系”,即u和v两个人都想和对方组队。每个人希望组队的对象有可能有多个。
一支队伍由且仅由两个人组成,并且如果u和v组队了,那么u、v将不能和其他人再组成一支队。
现在问你,这n个人最多能组成多少支队伍。(允许某些人组不了队)

Input

第一行输入一个整数n,m(1<=n<=200000)
接下来n-1行,每行两个整数u,v,表示u和v两个人都想和对方组队。
数据保证是一个合法的树。

Output

输出一个整数,表示最多能组成多少支队伍。

Input

5
1 2
1 3
2 4
4 5

Output

2

Limitation

1s 256MB

Hint

一种可行的组队方案:
1与3组队
4与5组队
最多组成2支队

思路

基本的树形DP
dp[rt][0]表示rt这个点不与任何一个儿子连边,以k为根的子树的最大匹配
dp[rt][1]表示rt这个点与某一个儿子连边,以k为根的子树的最大匹配


核心代码

void dfs(int rt,int f)
{int mi=n;if(G[rt].size()==1&&G[rt][0]==f){return ;}for(int i=0;i<G[rt].size();++i){int tt=G[rt][i];if(tt==f) continue;dfs(tt,rt);dp[rt][0]+=dp[tt][1];dp[rt][1]+=dp[tt][1];if(dp[tt][1]-dp[tt][0]<mi) mi=dp[tt][1]-dp[tt][0];}dp[rt][1]=dp[rt][1]-mi+1;
}

代码示例

#include<bits/stdc++.h>
using namespace std;
const int maxn=200010;int n;vector<int> G[maxn];int dp[maxn][2];void dfs(int rt,int f)
{int mi=n;if(G[rt].size()==1&&G[rt][0]==f){return ;}for(int i=0;i<G[rt].size();++i){int tt=G[rt][i];if(tt==f) continue;dfs(tt,rt);dp[rt][0]+=dp[tt][1];dp[rt][1]+=dp[tt][1];if(dp[tt][1]-dp[tt][0]<mi) mi=dp[tt][1]-dp[tt][0];}dp[rt][1]=dp[rt][1]-mi+1;
}int main()
{ios::sync_with_stdio(false);cin>>n;int u,v;for(int i=1;i<n;++i){cin>>u>>v;G[u].push_back(v);G[v].push_back(u);}dfs(1,0);cout<<max(dp[1][0],dp[1][1])<<endl;return 0;
}

17AHU排位赛2 E题(树上最大匹配,树形DP)相关推荐

  1. 【牛客每日一题】4.15 Treepath 题解(树上dfs/树形DP)

    题目链接:https://ac.nowcoder.com/acm/problem/14248 来源:牛客网 题目描述 给定一棵n个点的树,问其中有多少条长度为偶数的路径.路径的长度为经过的边的条数.x ...

  2. 『树上匹配 树形dp』

    树上匹配 Description 懒惰的温温今天上班也在偷懒.盯着窗外发呆的温温发现,透过窗户正巧能看到一棵 n 个节点的树.一棵 n 个节点的树包含 n-1 条边,且 n 个节点是联通的.树上两点之 ...

  3. [蓝桥杯][2015年第六届真题]生命之树(树形dp)

    题目描述 在X森林里,上帝创建了生命之树. 他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值. 上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点a,b,都 ...

  4. 17AHU排位赛3 D题 旋转吧!雪月花 ! (DFS序,线段树维护树上最值)

    problem 在一个平面上有n个齿轮,每个齿轮都有自己的初始半径 ri r_i .有n-1对齿轮是互相嵌在一起的,即它们拥有相同的线速度.如果将n个齿轮当作n个点,将n-1条相嵌关系当作n-1条边, ...

  5. [BZOJ4033][HAOI2015]树上染色(树形DP)

    4033: [HAOI2015]树上染色 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 2437  Solved: 1034 [Submit][St ...

  6. bzoj4033: [HAOI2015]树上染色(树形dp)

    4033: [HAOI2015]树上染色 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 3269  Solved: 1413 [Submit][St ...

  7. POJ - 2342 Anniversary party(树形dp入门)

    题目链接:点击查看 题目大意:每个人都有一个快乐值,给定一个树状的从属关系,仅当上司和下属都不在的时候这个个人的快乐值才能表现出来,问怎么样才能让整体的快乐值达到最大 题目分析:做线段树做吐了,来换换 ...

  8. BZOJ5341[Ctsc2018]暴力写挂——边分治+虚树+树形DP

    题目链接: CSTC2018暴力写挂 题目大意:给出n个点结构不同的两棵树,边有边权(有负权边及0边),要求找到一个点对(a,b)满足dep(a)+dep(b)-dep(lca)-dep'(lca)最 ...

  9. BZOJ 2286 消耗战 (虚树+树形DP)

    给出一个n节点的无向树,每条边都有一个边权,给出m个询问, 每个询问询问ki个点,问切掉一些边后使得这些顶点无法与顶点1连接. 最少的边权和是多少. (n<=250000,sigma(ki)&l ...

  10. BZOJ 2133 切割(树形DP,树上背包)大概是本题全网第一篇题解 >_<【BZOJ 修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ 2133 切割这道题全网搜不到任何一篇题解 >_< 看评测记录也没有几个人AC- ...

最新文章

  1. sys.argv[]学习
  2. Pycharm环境调整
  3. 这个为生信学习打造的开源Bash教程真香!!(目录更新)!
  4. 怎么样提高自己的口才
  5. 使用vue-cli初始化项目时运行‘npm run dev’报错
  6. 为什么python这么慢_为啥 Python 运行速度这么慢 ?
  7. python列表-使用
  8. soltrace教程(3)基本使用
  9. stm32_004_stm32f103内部结构图
  10. 前端语音转文字实践总结
  11. python培训抖音广告骗局
  12. linux jar环境配置文件,启动jar包 指定配置文件和运行环境
  13. Freemarker - 根据模板动态生成word文档
  14. 学计算机的考研254分,2011年考研:历史学专业课254分经验谈
  15. 用php把图片合成视频,图片音乐合成视频 多张图片合成视频|图片合成视频软件...
  16. Unity4.x UWP版本打包流程
  17. PICASSO,一个高效的搜推广稀疏训练解决方案
  18. Excel 2010 VBA 入门 081 数据处理之获取不重复的数据
  19. 【正点原子STM32连载】第二十章 基本定时器实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
  20. 上传附件----q-uploader

热门文章

  1. ios苹果开发者账号申请流程(公司类型)
  2. 如何查询网站dns服务器地址,如何查询DNS服务器地址 dns服务器地址查询方法详解...
  3. 数学猜想验证步骤_“猜想——验证” 数学学习的重要方法
  4. 傻子也能看懂的弗洛伊德算法(转)
  5. 台式计算机怎么截屏,台式电脑怎么截屏
  6. jQuery弹窗组件 colorbox
  7. vue-video-player 断点续播
  8. 显卡如何超频?超多少合适?
  9. [ajax] 基础 HTTP相关问题-GET-POST-XHR使用-jQuery中的ajax-跨域-同源-jsonp-cors
  10. IIS6 配置ASP.NET网站伪静态