博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 4714 Tree2cycle dp
阅读量:6134 次
发布时间:2019-06-21

本文共 1077 字,大约阅读时间需要 3 分钟。

用树形dp做的,dp[t][i]表示t及其孩子入度都已经小于等于2并且t这个节点的入度等于i的最优解。

那么转移什么的自己想想就能明白了。

关键在于这个题目会暴栈,所以我用了一次bfs搜索出节点的顺序,然后再计算。

 

#include 
#include
#include
using namespace std;const int maxn=1e6+9;struct{ int to,next;}e[maxn*2];int head[maxn],lon;bool text[maxn];void edgeini(){ memset(head,-1,sizeof(head)); lon=-1;}void edgemake(int from,int to){ e[++lon].to=to; e[lon].next=head[from]; head[from]=lon;}int dp[maxn][3];int from[maxn];void dfs(int t){ int k; int a1=10,a2=10,ret=0,u; for(k=head[t];k!=-1;k=e[k].next) { u=e[k].to; if(u==from[t]) continue; ret++; dp[t][0]+=dp[u][2]+2; if(dp[u][1]-dp[u][2]
=1) dp[t][1]=max(0,dp[t][0]+a1-2); else dp[t][1]=dp[t][0]; if(ret>=2) dp[t][2]=max(0,dp[t][0]+a1+a2-4); else dp[t][2]=dp[t][1];// cout<<0<
=1;i--) dfs(que[i]);}int main(){ int T; scanf("%d",&T); while(T--) { memset(dp,0,sizeof(dp)); edgeini(); int n; scanf("%d",&n); for(int i=1,from,to;i

 

 

转载地址:http://apeua.baihongyu.com/

你可能感兴趣的文章
配置spring上下文
查看>>
Python异步IO --- 轻松管理10k+并发连接
查看>>
Oracle中drop user和drop user cascade的区别
查看>>
登记申请汇总
查看>>
Office WORD如何取消开始工作右侧栏
查看>>
Android Jni调用浅述
查看>>
CodeCombat森林关卡Python代码
查看>>
第一个应用程序HelloWorld
查看>>
(二)Spring Boot 起步入门(翻译自Spring Boot官方教程文档)1.5.9.RELEASE
查看>>
Java并发编程73道面试题及答案
查看>>
企业级负载平衡简介(转)
查看>>
ICCV2017 论文浏览记录
查看>>
科技巨头的交通争夺战
查看>>
当中兴安卓手机遇上农行音频通用K宝 -- 卡在“正在通讯”,一直加载中
查看>>
Shell基础之-正则表达式
查看>>
JavaScript异步之Generator、async、await
查看>>
讲讲吸顶效果与react-sticky
查看>>
c++面向对象的一些问题1 0
查看>>
直播视频流技术名词
查看>>
企业级java springboot b2bc商城系统开源源码二次开发-hystrix参数详解(八)
查看>>