hdu5735
很美妙的一题
官方题解 http://www.cnblogs.com/duoxiao/p/5777632.html
感觉有meet in middle的思想
#include<bits/stdc++.h> using namespace std;
typedef long long ll;
const int mo=1e9+;
struct way{int po,next;} e[];
unsigned int mx[][],f[],tmp[][];
int n,w[],fa[],p[],v[],ans,len;
char s[];
void add(int x,int y)
{
e[++len].po=y;
e[len].next=p[x];
p[x]=len;
} void inc(int &a,int b)
{
a+=b;
if (a>mo) a-=mo;
} int calc(int a,int b)
{
if (s[]=='X') return a^b;
else return a&b;
} void get(int x)
{
if (x==) f[x]=;
else f[x]=f[fa[x]]+(w[x]|w[fa[x]]);
inc(ans,(ll)x*(f[x]+w[x])%mo);
for (int i=p[x]; i; i=e[i].next) get(e[i].po);
} void dfs(int x)
{
f[x]=;
int a=w[x]>>,b=w[x]&;
for (int i=; i<; i++)
if (v[i]) f[x]=max(f[x],mx[i][b]+(calc(a,i)<<));
inc(ans,(ll)x*(f[x]+w[x])%mo);
v[a]++;
for (int i=; i<; i++)
{
tmp[x][i]=mx[a][i];
mx[a][i]=max(mx[a][i],f[x]+calc(b,i));
}
for (int i=p[x]; i; i=e[i].next) dfs(e[i].po);
memcpy(mx[a],tmp[x],sizeof(tmp[x]));
v[a]--;
} int main()
{
int cas;
scanf("%d",&cas);
memset(mx,,sizeof(mx));
while (cas--)
{
len=; memset(p,,sizeof(p));
scanf("%d%s",&n,s);
for (int i=; i<=n; i++) scanf("%d",&w[i]);
for (int i=; i<=n; i++)
{
scanf("%d",&fa[i]);
add(fa[i],i);
}
ans=;
memset(v,,sizeof(v));
if (s[]=='O') get();
else dfs();
for (int i=; i<=n; i++) p[i]=;
printf("%d\n",ans);
}
}
hdu5735的更多相关文章
- HDU5735 : Born Slippy
考虑DP,设$f[x]$表示最后一个是$x$时的最优解,则$f[x]=\max(f[y]+w[x]\ opt\ w[y])$,其中$y$是$x$的祖先. 注意到$w[i]<2^{16}$,那么将 ...
随机推荐
- C/C++中二维数组和指针关系分析
在C/c++中,数组和指针有着密切的关系,有很多地方说数组就是指针式错误的一种说法.这两者是不同的数据结构.其实,在C/c++中没有所谓的二维数组,书面表达就是数组的数组.我猜想是为了表述方便才叫它二 ...
- 【图像处理】Haar Adaboost 检测自定义目标(视频车辆检测算法代码)
阅读须知 本博客涉及到的资源: 正样本:http://download.csdn.net/detail/zhuangxiaobin/7326197 负样本:http://download.csdn.n ...
- Application Error - The connection to the server was unsuccessful. (file:///android_asset/www/index.html)
问题描述: PhoneGap+Sencha Touch开发的应用,打包后的APP或者调试期间,在启动的时候提示如下信息: Application Error - The connection to t ...
- Qt -------- 多线程编程
一.继承QThread(不推荐) 定义一个类,继承QThread,重写run(),当调用方法start(),启动一个线程,run()函数运行结束,线程结束. 二.继承QRunnable Qrunnab ...
- IAR ------ 扩展关键字__weak
__weak作用:允许多个同名函数同时存在,但是最多只有一个没有__weak修饰.如果有non-weak函数(没__weak修饰),则此函数被使用,否则从__weak修饰的函数中选择其中一个. 下图来 ...
- jq 正则
if(_each_this_type_name == 'post_num'){ var patrn = /^[a-zA-Z0-9]{3,12}$/; if(!patrn.test(_each_this ...
- 分析一个贴图社交app的失败原因:FORK(相机)
FORK(相机)是一个通过分享图片来建立社交的app,它有着鲜明的配色,还算不错的贴图创新,细腻的产品设计,但是由于产品定位不清晰.设计亮点不多以及推广不利,从2014年5月第一版开始就没有火过.所以 ...
- React Mixin
为什么使用 Mixin ? React为了将同样的功能添加到多个组件当中,你需要将这些通用的功能包装成一个mixin,然后导入到你的模块中. 可以说,相比继承而已,React更喜欢这种组合的方式. 写 ...
- 网页导出excel文件
response.setContentType("application/vnd.ms-excel"); response.setHeader("content-disp ...
- 完美解决小米pro风扇乱转的问题
新买的小米Pro顶配,发现CPU高于20%的时候就开始狂响,最后找到了解决的方法,但是不知道会有什么影响.方法如下: 在平衡模式下更改高级电源设置--->处理器电源管理--->最大出来状态 ...