hdu 5735 Born Slippy 暴力
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 暴力的更多相关文章
- HDU 5735 Born Slippy(拆值DP+位运算)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5735 [题目大意] 给出一棵树,树上每个节点都有一个权值w,w不超过216,树的根为1,从一个点往 ...
- HDU 5735 - Born Slippy
题意: 一棵 n 个节点的根树,i 节点权重 wi 对每一个节点s,找到这样一个长 m 的标号序列 v : 1. vi是vi-1 的祖先 2. f[s] = w[vi] + ∑(i=2, m) (w[ ...
- hdu 5461 Largest Point 暴力
Largest Point Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...
- hdu 5762 Teacher Bo 暴力
Teacher Bo 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5762 Description Teacher BoBo is a geogra ...
- HDU 1333 基础数论 暴力
定义一种数位simth数,该数的各位之和等于其所有质因子所有位数字之和,现给出n求大于n的最小该种数,n最大不超过8位,那么直接暴力就可以了. /** @Date : 2017-09-08 14:12 ...
- HDU 4618 Palindrome Sub-Array 暴力
Palindrome Sub-Array 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4618 Description A palindrome s ...
- HDU 2089 不要62 | 暴力(其实是个DP)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=2089 题解: 暴力水过 #include<cstdio> #include<algor ...
- HDU 6115 Factory LCA,暴力
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6115 题意:中文题面 分析:直接维护LCA,然后暴力枚举集合维护答案即可. #include < ...
- HDU 5636 Shortest Path 暴力
Shortest Path 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5636 Description There is a path graph ...
随机推荐
- Spring RedisTemplate操作-ZSet操作(6)
@Autowired @Resource(name="redisTemplate") private RedisTemplate<String, String> rt; ...
- Gnucash数据库结构
- 20155319 2016-2017-2 《Java程序设计》第5周学习总结
20155319 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 8 异常处理 - `try`和`catch`语法,如果被try{}的语句出现了catch() ...
- windows环境命令行创建虚拟环境
1:安装virtualenv pip install virtualenv 2:创建并激活虚拟环境 #创建虚拟环境 D:\>mkdir xianmu D:\>cd xianmu D:\xi ...
- 两种常量类型-readonly和const
C#中有两种常量类型,分别为readonly(运行时常量)与const(编译时常量),本文将就这两种类型的不同特性进行比较并说明各自的适用场景. 工作原理 readonly 为运行时常量(动态常量), ...
- 解决JavaFTP上传文件假死问题
之前使用ftp上传文件,代码很稳定,用了快三年,因为数据迁移,从搭建了ftp服务器,配置好ip和账号密码后,再使用之前代码发现: 在下载过程中,程序出现假死的现象,就是,既不报错,也不抛异常,还不终止 ...
- javascript-序列化,时间,eval,转义
一:序列化 JSON.stringify(li) 将对象转字符串 JSON.parse(str1) 将字符串转对象 li=[11,22,33] [11, 22, 33] li [11, 22, 33] ...
- jdk8 lambda表达式总结
Java8 lambda表达式10个示例 1. 实现Runnable线程案例 使用() -> {} 替代匿名类: //Before Java 8: new Thread(new Runnab ...
- centos 6.8 启动损坏修复实验
前两天遇到了一个问题,centos必须借助CD的启动才能进入系统,当时想着做个测试,这会儿正好有时间,在VMWare里面试试. 思想是这样的,删除boot里面的文件,然后重启看效果. 具体过程如下: ...
- 大数据统计分析平台之一、Kafka单机搭建
1.zookeeper搭建 Kafka集群依赖zookeeper,需要提前搭建好zookeeper 单机模式(7步)(集群模式进阶请移步:http://blog.51cto.com/nileader/ ...