hdu-2196 Computer
来源:互联网 发布:淘宝刷评给礼品微信号 编辑:程序博客网 时间:2024/06/05 16:40
题意:
给出一颗树,求所有点离树上点的最大距离;
n<=10000;
题解:
因为一棵树是没有环的,所以对于某个点:
其答案可能在其子树中的最长路,或者在将此树倒置后,父结点的子树的最长路;
这两者是不会有交叉的;
所以维护子树到当前结点的最长路ma[x],和向上到父节点找到的最长路fa[x];
ma的维护好说,而fa的维护中,设父结点为x,子结点为y,x->y 的边权为val;
fa[y]= max( ma[x]+val , fa[x]+val)
但是倘若恰好y是ma[x]这条路上的一点,是不能满足此式的;
因此再维护次大值,当这种情况时就用次大值更新即可;
需要两遍dfs,时间复杂度O(n);
代码:
#include<vector>#include<stdio.h>#include<string.h>#include<algorithm>#define N 10001using namespace std;vector<int>to[N],val[N];int ma1[N],ma2[N],fa[N];void init(int n){ for(int i=1;i<=n;i++) to[i].clear(),val[i].clear(); memset(ma1,0,sizeof(ma1)); memset(ma2,0,sizeof(ma2)); memset(fa,0,sizeof(fa));}void dfs1(int x,int pre){ int i,y; for(i=0;i<to[x].size();i++) { if((y=to[x][i])!=pre) { dfs1(y,x); if(ma1[x]<ma1[y]+val[x][i]) ma2[x]=ma1[x],ma1[x]=ma1[y]+val[x][i]; else if(ma2[x]<ma1[y]+val[x][i]) ma2[x]=ma1[y]+val[x][i]; } }}void dfs2(int x,int pre){ int i,y; for(i=0;i<to[x].size();i++) { if((y=to[x][i])!=pre) { if(ma2[x]>=ma1[y]+val[x][i])//判断是否为最大只需与次大比较(因为可能出现最大等于次大) fa[y]=max(fa[x],ma1[x])+val[x][i]; else fa[y]=max(fa[x],ma2[x])+val[x][i]; dfs2(y,x); } }}int main(){ int n,m,i,j,k,x,y,v; while(scanf("%d",&n)!=EOF) { init(n); for(i=2;i<=n;i++) { scanf("%d%d",&y,&v); to[i].push_back(y); val[i].push_back(v); to[y].push_back(i); val[y].push_back(v); } dfs1(1,0); dfs2(1,0); for(i=1;i<=n;i++) { printf("%d\n",max(ma1[i],fa[i])); } } return 0;}
0 0
- HDU 2196 Computer
- hdu 2196 Computer
- hdu 2196 Computer
- HDU 2196 Computer
- hdu 2196 Computer
- HDU 2196 Computer
- HDU 2196 Computer
- HDU 2196 Computer
- HDU 2196 Computer【new】
- HDU 2196 Computer
- HDU 2196 Computer
- HDU 2196 Computer
- hdu 2196 Computer DP
- hdu 2196 computer
- hdu 2196 computer
- hdu-2196 Computer
- HDU 2196 Computer
- HDU 2196 Computer
- OpenTK使用 FreeType2渲染字母范例
- 【数据结构】顺序栈的实现(c++)
- java内部类的一些细节
- java方法重载和重写
- hdu2588GCD
- hdu-2196 Computer
- 2015-5-28碎碎念
- Linux 驱动之 EXPORT_SYMBOL 函数以及 2.6 内核 Unknown symbol bug 解决办法
- HDU 5242 Game 上海大都会赛 G题
- 3-42
- day2
- 【数据结构】顺序队列的实现(c++)
- 北京络捷斯特第三方物流信息系统技术解析(三) 订单录入-出库订单
- 题目1522:包含min函数的栈