hdu 2196

树形dp题,要求求出书上的最远距离;

很经典的一种树形dp;

思路:最远距离要么是从老爸的最远距离+自己与老爸的距离;

        要么是儿子的最远距离+自己与儿子的距离;

然后比较上面两个的大小就是答案了!

参考了别人的代码:

两次搜索:

1.第一次搜索是从下至上的搜索,找到每个节点的最远距离f[],次远距离sf[];并记录最远距离的那个点;

2.第二次搜索是从上往下的搜索,找到老爸那边来的最远距离dp[];

代码:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<vector>
 4 #define maxn 10005
 5 using namespace std;
 6 
 7 struct node
 8 {
 9     int v,w;
10 };
11 
12 vector<node>ve[maxn];
13 int dp[maxn],f[maxn],d[maxn],sf[maxn];
14 
15 void dfs1(int a)
16 {
17     int f1=-1,f2=-1,max=-1;
18     int l=ve[a].size();
19     if(f[a]||l==0)return;
20     for(int i=0; i<l; i++)
21     {
22         int k=ve[a][i].v;
23         dfs1(k);
24         if(max<f[k]+ve[a][i].w)
25         {
26             max=f[k]+ve[a][i].w;
27             f1=i;
28         }
29     }
30     d[a]=f1;
31     f[a]=max;
32     max=-1;
33     for(int i=0;i<l;i++)
34     {
35         int k=ve[a][i].v;
36         if(i!=f1&&max<f[k]+ve[a][i].w)
37         {
38             max=f[k]+ve[a][i].w;
39             f2=i;
40         }
41     }
42     if(f2!=-1) sf[a]=max;
43 }
44 
45 void dfs2(int a)
46 {
47     int l=ve[a].size();
48     if(l==0)return;
49     for(int i=0;i<l;i++)
50     {
51         int k=ve[a][i].v;
52         if(i==d[a])
53             dp[k]=max(sf[a],dp[a])+ve[a][i].w;
54         else dp[k]=max(f[a],dp[a])+ve[a][i].w;
55         dfs2(k);
56     }
57 }
58 
59 int main()
60 {
61     int n,a,b;
62     node no;
63     while(scanf("%d",&n)!=EOF)
64     {
65         for(int i=1; i<=n; i++)
66             ve[i].clear();
67         memset(dp,0,sizeof dp);
68         memset(f,0,sizeof f);
69         memset(d,0,sizeof d);
70         memset(sf,0,sizeof sf);
71         for(int i=2; i<=n; i++)
72         {
73             scanf("%d%d",&a,&b);
74             no.v=i;
75             no.w=b;
76             ve[a].push_back(no);
77         }
78         dfs1(1);
79         dfs2(1);
80         for(int i=1; i<=n; i++)
81             printf("%d\n",max(dp[i],f[i]));
82     }
83     return 0;
84 }
View Code

 

 

转载于:https://www.cnblogs.com/yours1103/p/3326482.html

内容概要:本文深入探讨了金属氢化物(MH)储氢系统在燃料电池汽车中的应用,通过建立吸收/释放氢气的动态模型和热交换模型,结合实验测试分析了不同反应条件下的性能表现。研究表明,低温环境有利于氢气吸收,高温则促进氢气释放;提高氢气流速和降低储氢材料体积分数能提升系统效率。论文还详细介绍了换热系统结构、动态性能数学模型、吸放氢特性仿真分析、热交换系统优化设计、系统控制策略优化以及工程验证与误差分析。此外,通过三维动态建模、换热结构对比分析、系统级性能优化等手段,进一步验证了金属氢化物储氢系统的关键性能特征,并提出了具体的优化设计方案。 适用人群:从事氢能技术研发的科研人员、工程师及相关领域的研究生。 使用场景及目标:①为储氢罐热管理设计提供理论依据;②推动车载储氢技术的发展;③为金属氢化物储氢系统的工程应用提供量化依据;④优化储氢系统的操作参数和结构设计。 其他说明:该研究不仅通过建模仿真全面验证了论文实验结论,还提出了具体的操作参数优化建议,如吸氢阶段维持25-30°C,氢气流速0.012g/s;放氢阶段快速升温至70-75°C,水速18-20g/min。同时,文章还强调了安全考虑,如最高工作压力限制在5bar以下,温度传感器冗余设计等。未来的研究方向包括多尺度建模、新型换热结构和智能控制等方面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值