栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 2834 Maximize Game Time

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 2834 Maximize Game Time

#include<cstdio>#include<vector>#include<cstring>#include<algorithm>using namespace std;#define CLR(v) memset(v,0,sizeof(v));const int maxn = 1010;int val[maxn];vector<int> edge[maxn];int more[maxn],dp[maxn],sum[maxn];void get_sum(int u,int f){sum[u]=val[u];int sz=edge[u].size();for(int i=0;i<sz;i++){int v=edge[u][i];if(v==f) continue; get_sum(v,u);sum[u]+=sum[v];}}void get_more(int u,int f){more[u]=0;int sz=edge[u].size();int s=0;for(int i=0;i<sz;i++){int v=edge[u][i];if(v==f) continue;get_more(v,u);}for(int i=0;i<sz;i++) s+=more[edge[u][i]];for(int i=0;i<sz;i++){int v=edge[u][i];more[u]=max(more[u],sum[v]+s-more[v]);}}bool vis[maxn];void dfs(int u,int f){dp[u]=val[u];int sz=edge[u].size();if(sz==1)dp[u]=max(dp[u],sum[edge[u][0]]+val[u]);int s=0;for(int i=0;i<sz;i++){int v=edge[u][i];if(v==f) continue;dfs(v,u);}for(int i=0;i<sz;i++)s+=more[edge[u][i]];for(int i=0;i<sz;i++){for(int j=i+1;j<sz;j++){int son1=edge[u][i];int son2=edge[u][j];dp[u]=max(dp[u],dp[son1]+sum[son2]+s-more[son1]-more[son2]+val[u]);dp[u]=max(dp[u],dp[son2]+sum[son1]+s-more[son1]-more[son2]+val[u]);}}}bool root[maxn];int main(){int n;while(scanf("%d",&n),n){for(int i=0;i<n;i++) scanf("%d",&val[i]),edge[i].clear();memset(root,false,sizeof(root));for(int i=0,j;i<n;i++){scanf("%d",&j); if(j==-1) root[i]=true;if(j!=-1) edge[j].push_back(i);}CLR(dp);CLR(more);CLR(sum);int ans=0;for(int i=0;i<n-1;i++){if(root[i]){get_sum(i,-1);ans+=sum[i];}}get_sum(n-1,-1);get_more(n-1,-1);dfs(n-1,-1);printf("%dn",ans+dp[n-1]);}return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/374517.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号