【hdu】2196 Computer【树形dp】
来源:互联网 发布:java程序设计pdf百度云 编辑:程序博客网 时间:2024/05/02 06:45
题意:
给出一棵树,树上边的长度不同,问树上的每个节点到别的节点的最远距离是多少
题解:
树形dp的经典应用,一个节点b的最长距离有三种情况,1.来自他的子树2.与他父节点距离最大的节点+他与他父节点的距离
第二种情况分为两种3.是与他父节点距离最大的节点在以父节点为根的子树中4.来自以父节点为根的子树之外的树
上面3.中如果节点b在这条最长路中的话就不行了,所以我们还要记下父节点的第二长路
dp[i][0]记录子树中的第一长路dp[i][1]记录子树中的第二长路dp[i][2]记录子树之外的最长路
前两个可以通过一次dfs1算出,第二个可以在第一次dfs1的基础上通过dfs2算出
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N=10005;struct node{ int v,w,next;}edge[N];int head[N],NE,dp[N][3],n;void init(){ NE=0; memset(head,-1,sizeof(head));}void add(int u,int v,int w){ edge[NE].v=v; edge[NE].w=w; edge[NE].next=head[u]; head[u]=NE++;}void dfs1(int u){ int biggest=0,bigger=0; for(int i=head[u];i!=-1;i=edge[i].next){ int v=edge[i].v; dfs1(v); int tmp=dp[v][0]+edge[i].w; if(tmp>=biggest){ bigger=biggest; biggest=tmp; } else if(tmp>bigger) bigger=tmp; } dp[u][0]=biggest; dp[u][1]=bigger;}void dfs2(int u){ for(int i=head[u];i!=-1;i=edge[i].next){ int v=edge[i].v; dp[v][2]=max(dp[u][2],dp[v][0]+edge[i].w==dp[u][0]?dp[u][1]:dp[u][0])+edge[i].w; dfs2(v); }}int main(){//freopen("C:\\Users\\Administrator\\Desktop\\input.txt","r",stdin); int u,w; while(scanf("%d",&n)!=EOF){ init(); for(int i=2;i<=n;i++){ scanf("%d%d",&u,&w); add(u,i,w); } dfs1(1); dfs2(1); for(int i=1;i<=n;i++) printf("%d\n",max(dp[i][0],dp[i][2])); } return 0;}
0 0
- HDU 2196 Computer(树形dp)
- 【树形DP】 HDU 2196 Computer
- HDU 2196 Computer(树形DP)
- Hdu 2196 Computer(树形dp)
- Computer - HDU 2196 树形dp
- Hdu 2196 Computer (树形dp)
- HDU 2196 Computer | 树形dp
- 【树形DP】 HDU 2196 Computer
- HDU 2196 Computer (树形DP)
- hdu 2196 Computer (树形dp)
- *HDU 2196 - Computer(树形DP)
- [HDU 2196] Computer 树形dp
- HDU 2196Computer 树形dp
- 【hdu】2196 Computer【树形dp】
- HDU 2196 Computer [树形dp]
- hdu 2196 Computer(树形DP)
- 树形DP-HDU-2196-Computer
- 【HDU】2196 Computer 树形dp
- C++ 智能指针详解
- android网络框架
- 如何查看linux系统CPU利用率
- 使用mybatis-spring,必须使用spring3.0 以上
- Maven
- 【hdu】2196 Computer【树形dp】
- eclipse插件开发:把自定义的文件类型使用xml编辑器打开
- ios面试题整合3
- 提示:413 Request Entity Too Large 的解决方法
- openwrt下让telnetl与ssh(dropbear)共存
- 图片缩放
- 来看一场开发者大会,缘何引来千人盛况
- NYOJ Gone Fishing 贪心策略
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)