#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; const int N=;
int n,m,len;
struct node{
int x,y,d,next;
}a[*N];
int first[N],f0[N],f1[N][],g0[N],g1[N][],tot[N];
/*
若m=0,
f[x]:x的子树的节点到x的距离的总和
g[x]:不是x的子树上的点到x的距离的总和
f[x]=f[y]+d(x,y)*tot[y] y=all son[x]
g[x]=f[fa]+g[fa] - (f[x]+tot[x]*d(x,fa)) + (n-tot[x])*d(x,fa) 因为m<=15,异或只会影响最后四位数
则将f[x]拆分为f0[x]:f[x]除去最后四位数的部分:xx0000
f1[x][0~15]:f1[x][j]表示f[x]中有多少个最后四位为j的距离(不能像原来一样直接加进去,因为最后要异或)
g[x]同理。
*/ void ins(int x,int y,int d)
{
len++;
a[len].x=x;a[len].y=y;a[len].d=d;
a[len].next=first[x];first[x]=len;
} void dfs1(int x,int fa)
{
f1[x][]=;//debug
tot[x]=;
for(int i=first[x];i;i=a[i].next)
{
int y=a[i].y;
if(y!=fa)
{
dfs1(y,x);
tot[x]+=tot[y];
// f[x]+=f[y]+a[i].d*tot[y];
int now=a[i].d;
f0[x]+=f0[y]+tot[y]*(now-(now%));
for(int j=;j<=;j++)
{
int t=j+now%;
f1[x][t%]+=f1[y][j];
f0[x]+=(t-(t%))*f1[y][j];
}
}
}
} void dfs2(int x,int fa)
{
for(int i=first[x];i;i=a[i].next)
{
int y=a[i].y;
if(y!=fa)
{
// g[y]=f[x]+g[x]-f[y]+(n-2*tot[y])*a[i].d;
// g[y]=f[x]+g[x] - (f[y]+tot[y]*a[i].d) + (n-tot[y])*a[i].d /*
减法不会出现不够减:
因为减的东西之前一定加过(所以要考虑它的实际意义)
*/ //z c f[y]+tot[y]*a[i].d
int z=,c[];
memset(c,,sizeof(c));
int now=a[i].d;
z+=f0[y]+tot[y]*(now-(now%));
for(int j=;j<=;j++)
{
int t=j+now%;
c[t%]+=f1[y][j];//以y为根的子树中每个点都要加d(x,y),j变为t%16
z+=(t-(t%))*f1[y][j];
} //g[y]=f[x]+g[x]-(f[y]+tot[y]*a[i].d)
g0[y]+=f0[x]+g0[x]-z;
for(int j=;j<=;j++) g1[y][j]+=f1[x][j]+g1[x][j]-c[j]; //g[y]+=(n-tot[y])*a[i].d
for(int j=;j<=;j++) c[j]=g1[y][j];
for(int j=;j<=;j++)
{
int t=j+now;
g1[y][t%]=c[j];
g0[y]+=(t-(t%))*c[j];
}
dfs2(y,x);
}
}
} int main()
{
// freopen("a.in","r",stdin);
freopen("warehouse.in","r",stdin);
freopen("warehouse.out","w",stdout);
len=;
memset(first,,sizeof(first));
scanf("%d%d",&n,&m);
for(int i=;i<n;i++)
{
int x,y,d;
scanf("%d%d%d",&x,&y,&d);
ins(x,y,d),ins(y,x,d);
}
memset(f0,,sizeof(f0));
memset(f1,,sizeof(f1));
memset(g0,,sizeof(g0));
memset(g1,,sizeof(g1));
dfs1(,);dfs2(,);
int ans=;
for(int i=;i<=n;i++)
{
ans=f0[i]+g0[i];
for(int j=;j<=;j++)
{
int now=j^m;
ans+=(f1[i][j]+g1[i][j])*now;
}
ans-=m;
printf("%d\n",ans);
}
return ;
}

【20160815】noip模拟(未完)的更多相关文章

  1. 【20160811】noip模拟-未完

    T1 T2 T3 小奇回地球 [问题描述] 简单来说,它要从标号为1的星球到标号为n的星球,某一些星球之间有航线.由于超时空隧道的存在,从一个星球到另一个星球时间可能会倒流,而且,从星球a到b耗费的时 ...

  2. NOIP模拟题汇总(加厚版)

    \(NOIP\)模拟题汇总(加厚版) T1 string 描述 有一个仅由 '0' 和 '1' 组成的字符串 \(A\),可以对其执行下列两个操作: 删除 \(A\)中的第一个字符: 若 \(A\)中 ...

  3. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  4. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  5. Codeforces Round #395 (Div. 2)(未完)

    2.2.2017 9:35~11:35 A - Taymyr is calling you 直接模拟 #include <iostream> #include <cstdio> ...

  6. 布隆过滤器(Bloom Filter) 未完待续

    布隆过滤器雏形 未完待续..... 计算错误率 现在有一个空额布隆过滤器, 过滤器里的bit array的大小是m. 咱来插入一个元素. 这次插入过程中的第一个hash函数会算出一个位置, 然后把这个 ...

  7. 从Socket入门到BIO,PIO,NIO,multiplexing,AIO(未完待续)

    Socket入门 最简单的Server端读取Client端内容的demo public class Server { public static void main(String [] args) t ...

  8. 【noip模拟赛4】Matrix67的派对 暴力dfs

    [noip模拟赛4]Matrix67的派对   描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们 ...

  9. Go web编程学习笔记——未完待续

    1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...

  10. NOIP模拟赛-2018.11.7

    NOIP模拟赛 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 编译之前另存一份,听说如果敲 ...

随机推荐

  1. netty学习记录2

    昨天晚上在看到7.2章MessagePack编码器和解码器开发这一章时,书里面没有贴出全部的代码,然后我按照我自己的想法把代码补全后,发现死活没有把代码跑通. 然后花了挺多时间在网上找,很多博客都贴出 ...

  2. AD-Powershell for Active Directory Administrators

    Table of Contents   Computer object commands Group object commands Organizational Unit (OU) commands ...

  3. 商业地产 招商 招租 CRM 意向 洽谈 合同 复用商铺商户管理系统

    适用场合 本软件适合商业地产的对招商的全流程管理,包括商铺信息,商户信息,洽谈信息,意向签订,合同管理等. 软件有试用版可供下载试用. 联系方式 QQ:2417158658 Tel:130251102 ...

  4. wirehshark解密IPSEC流量

    wireshark解密IPSEC加密过的流量 题目是安恒二月月赛题目:简单的流量分析 1.首先会发现很多esp类型的流量 我们不知道密钥就没有办法解密,猜测密钥肯定是在流量包里面的. 加密流量在786 ...

  5. sphinx调用API参考(官方手册)

    API的参考实现是用PHP写成的,因为(我们相信)较之其他语言,Sphinx在PHP中应用最广泛.因此这份参考文档基于PHP API的参考,而且这节中的所有的代码样例都用PHP给出. 当然,其他所有A ...

  6. Structure From Motion(SFM,从运动恢复结构)

    Structure From Motion(SFM,从运动恢复结构) 阅读相关文献: Wu et al. Multicore Bundle Adjustment Agarwal et. al. Bun ...

  7. python json模块 超级详解

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.JSON的数据格式其实就是python里面的字典格式,里面可以包含方括号括起来的数组,也 ...

  8. Elasticsearch 监控和部署

    Elasticsearch: ! [ https://elasticsearch.cn/book/elasticsearch_definitive_guide_2.x/_cluster_health. ...

  9. 一个android控件资源网站

    http://www.androidviews.net/ 里面有各种常用控件,赞~

  10. UITableView性能优化【本文摘自智车芯官网】

    UITableView是个表格视图,可以在表格行空间中添加多个子控件,UITableView继承了UIScrollView,默认状态下可以堆单元格进行滚动,所有的UITableViewControll ...