17AHU排位赛2 E题(树上最大匹配,树形DP)
来源:互联网 发布:免费收据打印软件 编辑:程序博客网 时间:2024/06/03 04:43
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;}
阅读全文
1 0
- 17AHU排位赛2 E题(树上最大匹配,树形DP)
- vijos 1892 树上的最大匹配问题 树形dp
- 17AHU排位赛2 A题(最小生成树、LCA维护树上路径)
- 树形dp--树上涂色
- 17AHU排位赛1 C题(经典DP)
- 17AHU排位赛3 D题 旋转吧!雪月花 ! (DFS序,线段树维护树上最值)
- 【HAOI2015】【树形dp】树上染色
- 【bzoj4033】树上染色 树形dp
- 17AHU排位赛1 E题(gcd>1序列,容斥)
- uva 1220 ,Patty at Hali-Bula 树形dp 树上最大独立集 并判断是否唯一
- 17AHU排位赛2 F题(bitset优化)
- bzoj 4033: [HAOI2015]树上染色 树形dp
- [树形DP] BZOJ 4033 [HAOI2015]树上染色
- BZOJ 4033: [HAOI2015]树上染色 树形dp
- [bzoj4033][HAOI2015]树上染色(树形dp)
- [BZOJ]4033: [HAOI2015]树上染色 树形DP
- 【BZOJ4033】【HAOI2015】树上染色 树形DP
- 17AHU排位赛3 C题 (LCS)
- 金融领域还款算法
- css-sprites简单使用
- 【网络】TCP/IP连接为什么是三次握手?
- TACACS+技术
- js 日期工具类
- 17AHU排位赛2 E题(树上最大匹配,树形DP)
- 命令行 降低IE版本 IE11降到IE8
- service工作过程
- 传统基础图片压缩:先尺寸压缩后质量压缩
- Objective-c 中保留小数点后几位
- Mybatis映射pojo包含pojo
- 关于跨线程操作的心得
- mysql:distinct与group by 效率对比
- HibernateTemplate和HibernateDaoSupport的认识