[CSP-S模拟测试]:小奇的仓库(warehouse)(树形DP)
题目背景
小奇采的矿实在太多了,它准备在喵星系建个矿石仓库。令它无语的是,喵星系的货运飞船引擎还停留在上元时代!
题目描述
喵星系有$n$个星球,星球以及星球间的航线形成一棵树。
从星球$a$到星球$b$要花费$[dis(a,b)\ Xor\ M]$秒。($dis(a,b)$表示$ab$间的航线长度,$Xor$为位运算中的异或)
为了给仓库选址,小奇想知道,星球$i(1\leqslant i\leqslant n)$到其它所有星球花费的时间之和。
输入格式
第一行包含两个正整数$n$,$M$。
接下来$n-1$行,每行$3$个正整数$a,b,c$,表示$a$,$b$之间的航线长度为$c$。
输出格式
$n$行,每行一个整数,表示星球$i$到其它所有星球花费的时间之和。
样例
样例输入:
4 0
1 2 1
1 3 2
1 4 3
样例输出:
6
8
10
12
数据范围与提示

保证答案不超过$2\times {10}^9$。
题解
$M=0$的时候的树上$DP$谁都会(假设),那么回归这道题,该怎么办呢?
先来观察数据范围,发现$M$很小,所以依然考虑从$M$入手。
那么我们先来考虑$M=1$的情况,我们只需要在$Xor$的时候记录有多少个$0$,多少个$1$,然后每当一条路径到2,那部分就再记录一个值。
现在来考虑满分算法,我们考虑$0\sim 16$,利用$bitset$不就好啦嘛~
时间复杂度:$\Theta(N\times M)$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
struct rec
{
int nxt;
int to;
int w;
}e[200000];
int head[100001],cnt;
int n,m;
int ans[100001];
int size[100001];
int bit1[100001][20],bit2[100001][20];
long long dp[100001],g[100001];
bool vis[100001];
void add(int x,int y,int w)
{
e[++cnt].nxt=head[x];
e[cnt].to=y;
e[cnt].w=w;
head[x]=cnt;
}
void dfs(int x)
{
vis[x]=1;
bit1[x][0]=size[x]=1;
for(int i=head[x];i;i=e[i].nxt)
if(!vis[e[i].to])
{
dfs(e[i].to);
dp[x]+=size[e[i].to]*e[i].w+dp[e[i].to];
size[x]+=size[e[i].to];
for(int j=0;j<=15;j++)
bit1[x][(j+e[i].w)&15]+=bit1[e[i].to][j];
}
}
void DP(int x,int fa,long long w)
{
dp[x]=dp[fa];
dp[x]+=(size[1]-size[x]*2)*w;
g[x]=dp[x];
for(int i=0;i<=15;i++)
bit2[x][(i+w)&15]=bit2[fa][i]+bit1[fa][i]-bit1[x][(i-w+16)&15];
for(int i=0;i<=15;i++)
g[x]+=(bit2[x][i]+bit1[x][i])*((i^m)-i);
for(int i=head[x];i;i=e[i].nxt)
if(e[i].to!=fa)
DP(e[i].to,x,e[i].w);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<n;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
add(b,a,c);
}
dfs(1);
g[1]=dp[1];
for(int i=0;i<=15;i++)
g[1]+=bit1[1][i]*((i^m)-i);
for(int i=head[1];i;i=e[i].nxt)
DP(e[i].to,1,e[i].w);
for(int i=1;i<=n;i++)
printf("%lld\n",g[i]-m);
return 0;
}
rp++
[CSP-S模拟测试]:小奇的仓库(warehouse)(树形DP)的更多相关文章
- [CSP-S模拟测试]:小奇的矩阵(matrix)(DP+数学)
题目背景 小奇总是在数学课上思考奇怪的问题. 题目描述 给定一个$n\times m$的矩阵,矩阵中的每个元素$a_{i,j}$为正整数.接下来规定: $1.$合法的路径初始从矩阵左上角出发,每 ...
- 小奇的仓库(树形DP)
「题目背景」 小奇采的矿实在太多了,它准备在喵星系建个矿石仓库.令它无语的是,喵星系的货运飞船引擎还停留在上元时代! 「问题描述」 喵星系有n个星球,星球以及星球间的航线形成一棵树. 从星球a到星球b ...
- [CSP-S模拟测试]:小奇挖矿2(DP+赛瓦维斯特定理)
题目背景 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿石交易市场,以便为飞船升级无限非概率引擎. 题目描述 现在有$m+1$个星球,从左到右标号为$0$到$n$,小奇最初 ...
- [CSP-S模拟测试]:小L的数(数位DP+模拟)
题目传送门(内部题132) 输入格式 第一行一个整数$t$. 接下来$t$行每行一个整数$n$. 输出格式 $t$行,每行一个整数表示答案. 样例 样例输入: 41818231232691052109 ...
- bzoj 4711 小奇挖矿 ——“承诺”类树形dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4711 对“承诺”有了更深的了解. 向外和向内要区分,所以 f [ i ][ j ] 表示根向 ...
- 【NOI省选模拟】小奇的花园
「题目背景」 小奇在家中的花园漫步时,总是会思考一些奇怪的问题. 「问题描述」 小奇的花园有n个温室,标号为1到n,温室以及以及温室间的双向道路形成一棵树. 每个温室都种植着一种花,随着季节的变换,温 ...
- 【换根DP】小奇的仓库
题目背景 小奇采的矿实在太多了,它准备在喵星系建个矿石仓库.令它无语的是,喵星系的货运飞船引擎还停留在上元时代! 题目内容 喵星系有\(n\)个星球,星球以及星球间的航线形成一棵树. 从星球\(a\) ...
- BZOJ4446 [Scoi2015]小凸玩密室 【树形Dp】
题目 小凸和小方相约玩密室逃脱,这个密室是一棵有n个节点的完全二叉树,每个节点有一个灯泡.点亮所有灯 泡即可逃出密室.每个灯泡有个权值Ai,每条边也有个权值bi.点亮第1个灯泡不需要花费,之后每点亮4 ...
- [10.12模拟赛] 老大 (二分/树的直径/树形dp)
[10.12模拟赛] 老大 题目描述 因为 OB 今年拿下 4 块金牌,学校赞助扩建劳模办公室为劳模办公室群,为了体现 OI 的特色,办公室群被设计成了树形(n 个点 n − 1 条边的无向连通图), ...
随机推荐
- firefox SSL_ERROR_RX_RECORD_TOO_LONG burpsuit 报错 解决方案
禁用TLS 1.3 .在Firefox的地址栏中输入“ about:config ”. .在搜索条目“tls.version.max ”.将值从4更改为3. .值4所表示TLS 1.3,3个代表TLS ...
- Eclipse如何汉化[完美版]
当前版本:Eclipse 4.5.1 1.如何查看eclipse的版本呢 找到关于Eclipse,点击 . 2.打开浏览器连接http://www.eclipse.org/babel/download ...
- 使用pycharm调试远程服务器上的程序
一.PyCharm实现远程调试代码 1. 和远程服务器建立连接,tools àDeploymentàConfiguration 2. 点击“+”号,按照远程服务器信息配置信息 点击“Advanced ...
- ash: export: `/usr/lib/jvm/jdk1.8.0_201/lib/dt.jar': 不是有效的标识符
ash: export: `/usr/lib/jvm/jdk1.8.0_201/lib/dt.jar': 不是有效的标识符 ps: 如果有任何问题可以评论留言,我看到后会及时解答,评论或关注,您的鼓励 ...
- OpenLayers绘制地图,无需外网,内网访问,提高安全性。
1. 首先引入ol ,npm i --save ol 2. 创建地图 一个地图初步就这样完成了. 3. 怎么与后台进行交互? 具体参考文档:http://weilin.me/ol3-primer/ch ...
- Solr的学习使用之(四)建数据库(添加Core)、表(配置schema.xml)
1.数据库数据库就相当于solr里面的核.solr4.6不能使用界面提供的的Core Admin/Add Core来建立,会报错,不懂为啥:那就采用最 简单的办法:把solr下载包里面的\solr-4 ...
- 对象名 XXX 无效。
对象名 XXX 无效. 首先检查自己数据库连接字符串是否正确!!! 已经有过好几次这样的错误了,还是不长记性,特意记下
- 2019年 Java 面试题解析
2019年 Java 面试题解析 转载地址:https://www.cnblogs.com/Zz-maker/p/11193930.html 作者: Zz_maker 包含的模块: 本文分为十九个模块 ...
- Prometheus + Grafana
Prometheus ubuntu安装prometheus非常简单: apt update apt install prometheus systemctl enable prometheus sys ...
- Android_Refrogit与RxJava结合使用(转)
Refrogit与RxJava结合的使用 达到了非常简单就可以完成请求网络 一:1.0示例: 1.导入依赖 compile 'io.reactivex:rxjava:1.3.4'compile ...