HDU5735 Born Slippy
来源:互联网 发布:健康系统破解软件 编辑:程序博客网 时间:2024/06/08 07:22
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5735
【题意】有n个节点,节点i的权值是wi,对于一个节点队列v1,v2,.....,vm,其中节点vi是节点点v(i-1)的祖先。对于一个队列,满足v1=s,f(s)=wv1+∑i=2mwvi opt wvi−1是最大的。求解
S=(∑i=1ni⋅f(i))%(1e9+7)
【分析】先膜拜题解,采用题解神奇的暴力dfs方法。先定义一个dp[i]=max(dp[j]+wi opt wj)(j是i的祖先)。
那么f(s)=dp[s]+ws。设定一个二维数组ds(x,y)是某个wi的后8位是y,某个wj的前8位是x的时候,dp(j)+wi后8位 opt wj后8位
的最值,于是就可以从祖先开始暴力求解,每次先枚举所有可能的祖先前8位,获得当前节点的最大值,累加在答案中,
保存当前的ds值,再枚举所有可能的子孙后8位,以这个为子孙的后8位最大值,搜索子孙,返回后将保存的值赋回。
【代码】
#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define LL long long#define MAXN 65540#define uint unsigned intconst int mod=1e9+7;uint n,f,ans;uint w[MAXN],vis[260],nxt[MAXN],ds[260][260],head[MAXN],tmp[MAXN][260];char op[10];void updata(uint &a,uint b){ if(a<b) a=b;}int opt(uint a,uint b){ if(op[0]=='A') return a&b; if(op[0]=='X') return a^b; return a|b;}void dfs(uint x){ uint dp=0,a=w[x]>>8,b=w[x]&255; for(uint i=0;i<256;++i) if(vis[i]) updata(dp,ds[i][b]+(opt(i,a)<<8)); ans=(1LL*x*(dp+w[x])+ans)%mod; vis[a]++; for(uint i=0;i<256;++i){ tmp[x][i]=ds[a][i]; updata(ds[a][i],opt(i,b)+dp); } for(uint i=head[x];i;i=nxt[i]) dfs(i); vis[a]--; for(uint i=0;i<256;++i) ds[a][i]=tmp[x][i];}int main(){ uint T; cin>>T; while(T--){ scanf("%d %s",&n,&op); for(int i=1;i<=n;++i){ scanf(" %d",&w[i]); head[i]=0; } for(int i=2;i<=n;++i){ scanf(" %d",&f); nxt[i]=head[f]; head[f]=i; } ans=0; dfs(1); cout<<ans<<endl; }}
0 0
- HDU5735 Born Slippy
- HDU5735 Born Slippy
- 2016多校联合第二场 HDU5735 B. Born Slippy 【树状dp剪枝优化】
- 2016多校联合第二场 HDU5735 Born Slippy 解题报告
- HDU 5735 Born Slippy
- HDU 5735 Born Slippy
- HDU 5735 Born Slippy
- 【HDU5735 2016 Multi-University Training Contest 2B】【暴力做法 + 折半法】Born Slippy 祖先链的最大运算权值
- hdu 5735 Born Slippy
- [HDU 5735] Born Slippy (机智暴力)
- HDU 5735 Born Slippy(dp+优化)
- HDU 5735 Born Slippy【巧妙暴力枚举】
- 【HDU 5735】Born Slippy(状压dp)
- HDU 5735 Born Slippy(树形DP)
- hdu 5735 Born Slippy 折半枚举
- hud oj 5735 Born Slippy (暴力)
- HDU 5735 Born Slippy 【DP + 小技巧】
- HDU 5735 Born Slippy(树形dp+可持久化)
- Android 混淆配置文件(项目中的)
- 【HDU】-5363-Key Set(快速幂)
- JSP学路漫漫 之 1.1 指令标签 (1) page指令
- svn
- 欢迎使用CSDN-markdown编辑器
- HDU5735 Born Slippy
- android获取中文对应的汉语拼音
- SimpleAdapter初步理解
- 'import module' or 'from module import'
- java数组与类集框架(基础知识)
- linux vi保存退出命令 (如何退出vi)
- C++ vector用法
- JAVA面向对象-----构造方法
- Linux JDK安装及配置 (tar.gz版)