#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. 如何修改Github上提交的错误用户地址和姓名

    Changing author info  https://help.github.com/articles/changing-author-info/   To change the name an ...

  2. C#调用C++编写的dll

    界面还是C#写的方便点,主要是有一个可视化的编辑器,不想画太多的时间在界面上.但是自己又对C++了解的多一些,所以在需要一个良好的界面的情况下,使用C++来写代码逻辑,将其编译成一个dll,然后用C# ...

  3. MyCAT+MySQL 搭建高可用企业级数据库集群——第2章 MyCat入门

    2-1 章节综述 2-2 什么是MyCat 2-3 什么是数据库中间层 2-4 MyCat的主要作用 2-5 MyCat基本元素 2-6 MyCat的安装 2-1 章节综述 1.掌握Mycat的基础概 ...

  4. 孤荷凌寒自学python第七十六天开始写Python的第一个爬虫6

    孤荷凌寒自学python第七十六天开始写Python的第一个爬虫6 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 不过由于对python-docx模 ...

  5. hibernate 批量插入

    Session session = sessionFactoryUpLowLimit.openSession(); session.beginTransaction(); for(int i=0 ;i ...

  6. Hexo 博客部署到 GitHub

    本文简单记录了一下把 Hexo 部署到 GitHub 上的过程,也是搭建静态博客最常用的一种方式. 前面写了关于如何把 Hexo 安装在树莓派上的教程,但树莓派毕竟是连着自己的家的路由器,万一哪天网断 ...

  7. HDU 4436 str2int(后缀自动机)(2012 Asia Tianjin Regional Contest)

    Problem Description In this problem, you are given several strings that contain only digits from '0' ...

  8. laravel 学习随笔(一)

    1.路由参数:路由参数总是通过花括号进行包裹,参数在路由被执行时会被传递到路由的闭包.(路由参数不能包含“-”字符,如有需要可以用“_”代替):

  9. Python不同进制之间的转换

    不同的进制 二进制    0b101 以数字0和字母b打头的表示二进制数 如果出现大于等于2的数 会抛出SyntaxError异常 八进制    0711 以数字0打头的数字表示八进制数 如果出现大于 ...

  10. JAVA第八周课堂笔记