#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. 【数据库】 SQL SERVER 2012 实用新特性

    [数据库] SQL SERVER 2012 实用新特性 官方链接 一. ALWAYS ON - 灾难恢复 二. 列存储索引 - 比非聚集索引效率高,但有索引表不允许修改数据(插入,更新,删除),用于读 ...

  2. Anytime项目开发记录4

    做事情列表,我在程序中命名为“正在做”. 这是一个Fragment,应用的主页面,由一个MainActivity加上DoingListFragment和PersonFragment组成.PersonF ...

  3. kindeditor 限制上传图片大小及宽高

    进入:/kindeditor/plugins/image/image.js,替换其中的 self.plugin.imageDialog = function (options)方法,代码为: self ...

  4. unresolved symbol @__security_check_cookie 解决方法

    ntstrsafe.lib(output.obj) : error LNK2019: unresolved external symbol @__security_check_cookie@4 ref ...

  5. Android 上能提高学习工作效率的应用

    在知乎上有朋友问 Android 上能提高学习.工作效率的应用有哪些?我给他们的推荐获得了最多赞同.以后会不断完善更新此贴. Any.do :规划日程,各平台都有. Evernote:记笔记,各平台都 ...

  6. Web框架本质及浅谈HTTP协议

    Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 半成品自定义web框架 impor ...

  7. 使用fiddler对手机上的APP进行抓包

    前提: 1.必须确保安装fiddler的电脑和手机在同一个wifi环境下 备注:如果电脑用的是台式机,可以安装一个随身wifi,来确保台式机和手机在同一wifi环境下 安装配置步骤: 1.下载一个fi ...

  8. BZOJ 3779 重组病毒 LCT+线段树(维护DFS序)

    原题干(由于是权限题我就直接砸出原题干了,要看题意概述的话在下面): Description 黑客们通过对已有的病毒反编译,将许多不同的病毒重组,并重新编译出了新型的重组病毒.这种病毒的繁殖和变异能力 ...

  9. php+Mysql 页面登录代码

    登录界面设置: <?php/** * Created by xx. * User: msi * Date: 2017/10/26 * Time: 18:12 *///session每次用之前都要 ...

  10. windows下eclipse连接ubuntu伪分布式hadoop2.6.0

    环境: win10 jdk1.7 hadoop2.6.0 linux虚拟机 Ubuntu14.04 首先把安装在Ubuntu上的hadoop2.6.0.tar.gz复制到windows系统上,解压到任 ...