SDUT 2895-D(记忆化搜索)

来源:互联网 发布:吃宵夜 知乎 编辑:程序博客网 时间:2024/05/06 18:13

题目链接:点击打开链接

题意:给出一棵含有n个点的树,每个点权值为wi,求从根节点到叶子结点权值和最大的那条路经的权值和是多少。

类似数塔,从顶自底记忆化搜。

#include <algorithm>#include <iostream>#include <cstring>#include <cstdlib>#include <string>#include <cctype>#include <vector>#include <cstdio>#include <cmath>#include <queue>#include <stack>#include <map>#include <set>#define maxn 10005#define _ll __int64#define ll long long#define INF 0x3f3f3f3f#define Mod 1<<40+10#define pp pair<int,int>#define ull unsigned long longusing namespace std;int n,dp[10005],root;vector <int> eg[10005];int dfs(int u){int tem=0;for(int i=0;i<eg[u].size();i++)tem=max(tem,dfs(eg[u][i]));dp[u]+=tem;return dp[u];}int main(){int u,c;while(~scanf("%d",&n)){for(int i=0;i<=n;i++)eg[i].clear();for(int i=1;i<=n;i++){scanf("%d%d",&u,&c);eg[u].push_back(i);if(u==0)root=i;dp[i]=c;}printf("%d\n",dfs(root));}return 0;}


1 0
原创粉丝点击