Born Slippy

题目连接:

http://acm.hdu.edu.cn/showproblem.php?pid=5735

Description

Professor Zhang has a rooted tree, whose vertices are conveniently labeled by 1,2,...,n. And the i-th vertex is assigned with weight wi.

For each s∈{1,2,...,n}, Professor Zhang wants find a sequence of vertices v1,v2,...,vm such that:

1. v1=s and vi is the ancestor of vi−1 (1<i≤m).
2. the value f(s)=wv1+∑i=2mwvi opt wvi−1 is maximum. Operation x opt y denotes bitwise AND, OR or XOR operation of two numbers.

Input

There are multiple test cases. The first line of input contains an integer T, indicating the number of test cases. For each test case:

The first line contains an integer n and a string opt (2≤n≤216,opt∈{AND,OR,XOR}) -- the number of vertices and the operation. The second line contains n integers w1,w2,...,wn (0≤wi<216). The thrid line contain n−1 integers f2,f3,...,fn (1≤fi<i), where fi is the father of vertex i.

There are about 300 test cases and the sum of n in all the test cases is no more than 106.

Output

For each test case, output an integer S=(∑i=1ni⋅f(i)) mod (109+7).

Sample Input

3

5 AND

5 4 3 2 1

1 2 2 4

5 XOR

5 4 3 2 1

1 2 2 4

5 OR

5 4 3 2 1

1 2 2 4

Sample Output

91

139

195

Hint

题意

给你一棵树,树上点有点权,对于每个点,你需要找到到根的那条链上的一个子序列。

使得f[i] = w[v[i]] + sigma w[v[i]] opt w[v[i+1]] 最大。

然后输出sigma(if[i])%mod

题解:

不会正解,n^2dp非常简单,很容易就能想到

然后感觉这道题的数据比较难造,就直接暴力了,然后一发就过了。

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 70000;
const int mod = 1e9+7;
long long dp[maxn],w[maxn];
int n;
vector<int>E[maxn];
string opt;
set<pair<long long,int> > S;
set<pair<long long,int> >::iterator it;
long long solve(long long x,long long y){
if(opt=="XOR")return x^y;
if(opt=="AND")return x&y;
if(opt=="OR")return x|y;
}
void dfs(int x){
if(S.size()!=0){
int tot = 0;
for(it = S.begin();it!=S.end()&&tot<100;it++,tot++){
dp[x] = max(dp[x],-(it->first)+solve(w[it->second],w[x]));
}
}
S.insert(make_pair(-dp[x],x));
for(int i=0;i<E[x].size();i++){
int v = E[x][i];
dfs(v);
}
S.erase(make_pair(-dp[x],x));
}
void solve(){
scanf("%d",&n);
for(int i=1;i<=n;i++)E[i].clear(),dp[i]=0;
cin>>opt;
for(int i=1;i<=n;i++)
scanf("%d",&w[i]);
for(int i=2;i<=n;i++){
int a;scanf("%d",&a);
E[a].push_back(i);
}
dfs(1);
long long ans = 0;
for(int i=1;i<=n;i++){
ans = (ans+i*(dp[i]%mod+w[i]%mod)) % mod;
}
printf("%I64d\n",ans);
}
int main(){
int t;
scanf("%d",&t);
while(t--)solve();
return 0;
}

hdu 5735 Born Slippy 暴力的更多相关文章

  1. HDU 5735 Born Slippy(拆值DP+位运算)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5735 [题目大意] 给出一棵树,树上每个节点都有一个权值w,w不超过216,树的根为1,从一个点往 ...

  2. HDU 5735 - Born Slippy

    题意: 一棵 n 个节点的根树,i 节点权重 wi 对每一个节点s,找到这样一个长 m 的标号序列 v : 1. vi是vi-1 的祖先 2. f[s] = w[vi] + ∑(i=2, m) (w[ ...

  3. hdu 5461 Largest Point 暴力

    Largest Point Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...

  4. hdu 5762 Teacher Bo 暴力

    Teacher Bo 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5762 Description Teacher BoBo is a geogra ...

  5. HDU 1333 基础数论 暴力

    定义一种数位simth数,该数的各位之和等于其所有质因子所有位数字之和,现给出n求大于n的最小该种数,n最大不超过8位,那么直接暴力就可以了. /** @Date : 2017-09-08 14:12 ...

  6. HDU 4618 Palindrome Sub-Array 暴力

    Palindrome Sub-Array 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4618 Description A palindrome s ...

  7. HDU 2089 不要62 | 暴力(其实是个DP)

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=2089 题解: 暴力水过 #include<cstdio> #include<algor ...

  8. HDU 6115 Factory LCA,暴力

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6115 题意:中文题面 分析:直接维护LCA,然后暴力枚举集合维护答案即可. #include < ...

  9. HDU 5636 Shortest Path 暴力

    Shortest Path 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5636 Description There is a path graph ...

随机推荐

  1. sh脚本学习之: 命令处理

    输出 默认是命令行输出 > 替换输出 >> append输出 2>  错误输出 < 由文件输入 <<eof 控制台输入,eof为输入结束标志 /dev/nul ...

  2. javascript模块模式

    目前模块模式得到了广泛应用,因为它提供了结构化的思想并且有助于组织日益增长的代码.模块模式提供了一种创建自包含非耦合代码片段有利工具,可以将它视为黑盒功能. 板栗: var array = (func ...

  3. 从零开始编写自己的JavaScript框架(一)

    1. 模块的定义和加载 1.1 模块的定义 一个框架想要能支撑较大的应用,首先要考虑怎么做模块化.有了内核和模块加载系统,外围的模块就可以一个一个增加.不同的JavaScript框架,实现模块化方式各 ...

  4. python技巧 合并两个字典

    python 3.5+ 版本 In [1]: a={'x':2,'y':4} In [2]: b={'c':1,'d':3} In [3]: c={'c':3,'y':6} In [4]:  w={* ...

  5. 第5月第24天 线性变换 opengl

    1. http://news.qiyeku.com/news_837979.html 2. opengl + (Class)layerClass { return [CAEAGLLayer class ...

  6. sqlserver2008R2数据库自动备份脚本

    CREATE proc [dbo].[usp_autoBackupDB] @dbname sysname=null --要备份的数据库名,不指定即为全部备份 ,)='d:\' --备份目录路径 ,)= ...

  7. 洛谷 P4128: bzoj 1815: [SHOI2006]有色图

    题目传送门:洛谷 P4128. 计数好题,原来是 13 年前就出现了经典套路啊.这题在当年应该很难吧. 题意简述: \(n\) 个点的完全图,点没有颜色,边有 \(m\) 种颜色,问本质不同的图的数量 ...

  8. python格式化输出【转】

    今天写代码时,需要统一化输出格式进行,一时想不起具体细节,用了最笨的方法,现在讲常见的方法进行一个总结. 一.格式化输出 1.整数的输出 直接使用'%d'代替可输入十进制数字: >>> ...

  9. 解除IIS配置节锁定

    C:\windows\system32\inetsrv\appcmd unlock config -section:system.webServer/modules

  10. SOA 设计的 9 大原则

    面向服务的架构 (SOA) 设计要尽可能地简单.在设计一个 SOA 服务的时候要谨记这 9 大设计原则: 1. 标准服务契约 服务要遵循一个服务描述. 2. 松耦合 服务之间的依赖最小化. 3. 服务 ...