传送门

分析

经典的树型DP

我们记录dp[i][0/1]表示i的子树中到i的长度分别为偶数和奇数的长度和

dp2[i][0/1]则表示不在i的子树中的点到i的长度分别为偶数和奇数的长度和

然后根据边的长度情况转移一下就可以了

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
long long dp[][],dp2[][];
int sum[][],sum2[][];
int val[],to[],head[];
int nxt[],cnt,n,m;
inline void add(int x,int y,int z){
nxt[++cnt]=head[x];
head[x]=cnt;
to[cnt]=y;
val[cnt]=z;
nxt[++cnt]=head[y];
head[y]=cnt;
to[cnt]=x;
val[cnt]=z;
}
inline void dfs1(int x,int fa){
int i,j,k;
for(i=head[x];i;i=nxt[i]){
if(to[i]==fa)continue;
dfs1(to[i],x);
if(val[i]%){
dp[x][]+=dp[to[i]][];
dp[x][]+=1ll*sum[to[i]][]*val[i];
sum[x][]+=sum[to[i]][];
dp[x][]+=dp[to[i]][]+1ll*val[i];
dp[x][]+=1ll*sum[to[i]][]*val[i];
sum[x][]+=sum[to[i]][]+;
}else {
dp[x][]+=dp[to[i]][]+1ll*val[i];
dp[x][]+=1ll*sum[to[i]][]*val[i];
sum[x][]+=sum[to[i]][]+;
dp[x][]+=dp[to[i]][];
dp[x][]+=1ll*sum[to[i]][]*val[i];
sum[x][]+=sum[to[i]][];
}
}
return;
}
inline void dfs2(int x,int fa){
int i,j,k;
long long t0=,t1=;
int s0=,s1=;
for(i=head[x];i;i=nxt[i]){
if(to[i]==fa)continue;
if(val[i]%){
t0+=dp[to[i]][];
t0+=1ll*sum[to[i]][]*val[i];
s0+=sum[to[i]][];
t1+=dp[to[i]][]+1ll*val[i];
t1+=1ll*sum[to[i]][]*val[i];
s1+=sum[to[i]][]+;
}else {
t0+=dp[to[i]][]+1ll*val[i];
t0+=1ll*sum[to[i]][]*val[i];
s0+=sum[to[i]][]+;
t1+=dp[to[i]][];
t1+=1ll*sum[to[i]][]*val[i];
s1+=sum[to[i]][];
}
}
for(i=head[x];i;i=nxt[i]){
if(to[i]==fa)continue;
long long T0=t0,T1=t1;int S0=s0,S1=s1;
if(val[i]%){
T0-=dp[to[i]][];
T0-=1ll*sum[to[i]][]*val[i];
S0-=sum[to[i]][];
T1-=dp[to[i]][]+1ll*val[i];
T1-=1ll*sum[to[i]][]*val[i];
S1-=sum[to[i]][]+;
dp2[to[i]][]+=dp2[x][]+T1;
dp2[to[i]][]+=1ll*(sum2[x][]+S1)*val[i];
sum2[to[i]][]+=sum2[x][]+S1;
dp2[to[i]][]+=dp2[x][]+1ll*val[i]+T0;
dp2[to[i]][]+=1ll*(sum2[x][]+S0)*val[i];
sum2[to[i]][]+=sum2[x][]++S0;
dfs2(to[i],x);
}else {
T0-=dp[to[i]][]+1ll*val[i];
T0-=1ll*sum[to[i]][]*val[i];
S0-=sum[to[i]][]+;
T1-=dp[to[i]][];
T1-=1ll*sum[to[i]][]*val[i];
S1-=sum[to[i]][];
dp2[to[i]][]+=dp2[x][]+1ll*val[i]+T0;
dp2[to[i]][]+=1ll*(sum2[x][]+S0)*val[i];
sum2[to[i]][]+=sum2[x][]++S0;
dp2[to[i]][]+=dp2[x][]+T1;
dp2[to[i]][]+=1ll*(sum2[x][]+S1)*val[i];
sum2[to[i]][]+=sum2[x][]+S1;
dfs2(to[i],x);
}
}
return;
}
int main(){
int i,j,k,x,y,z;
scanf("%d%d",&n,&m);
for(i=;i<n;i++){
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
}
dfs1(,);
dfs2(,);
for(i=;i<=m;i++){
scanf("%d",&x);
printf("%lld %lld\n",dp[x][]+dp2[x][],dp[x][]+dp2[x][]);
}
return ;
}

EZOJ #80的更多相关文章

  1. 80 端口被占用 pid=4

    80端口被pid=4的系统进程给占用的解决方法: 一般开发的时候我们都会安装sqlserver ,也会把Sql server Reporting Services 安装上去.原因就是这个服务占用了80 ...

  2. 使用nginx反向代理,一个80端口下,配置多个微信项目

    我们要接入微信公众号平台开发,需要填写服务器配置,然后依据接口文档才能实现业务逻辑.但是微信公众号接口只支持80接口(80端口).我们因业务需求需要在一个公众号域名下面,发布两个需要微信授权的项目,怎 ...

  3. System进程(pid=4)占用80端口的解决方案

    问题 Mail服务器在安装TFS服务(含SQLServer2016)后启动不了网页服务. 排查问题 使用命令查看端口占用情况 netstat -nao | find ":80" n ...

  4. Linux配置防火墙 开启80端口的方法

    命令行输入: vi /etc/sysconfig/iptables 将 -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT ...

  5. 北京54全国80及WGS84坐标系的相互转换

    这三个坐标系统是当前国内较为常用的,它们均采用不同的椭球基准.其中北京54坐标系,属三心坐标系,大地原点在苏联的普而科沃,长轴6378245m,短轴6356863,扁率1/298.3:西安80坐标系, ...

  6. 安装phpstudy之后发现80端口被占用

    安装phpstudy之后发现80端口被占用: 进入cmd的界面,在输入"netstat -ano",按回车键后,会显示当前电脑中程序占用的端口和程序ID等等信息:看到第一条就是:0 ...

  7. Apache报错信息之通常每个套接字地址(协议/网络地址/端口)只允许使用一次(could not bind to address 0.0.0.0:80)

    我们常常在执行 httpd –k restart 重启Apache时报错提示: (OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次.  : AH00072: make_soc ...

  8. wamp 修改默认apache 80端口

    wamp server 环境安装包 修改默认80端口 D:\wamp\bin\apache\apache2.4.9\conf\httpd.conf 找到如下代码出修改后,重启apache即可 ## L ...

  9. phpstudy 80端口被占用,修改端口

    搭建mantis,总会出现80端口被占用的情况.看到别的步骤是:1.cmd 运行netstat -ano查看80端口被什么占用,然后在任务管理器找到对应的结束进程.通常情况下是被System占用,右击 ...

随机推荐

  1. vmware centos 连网方式

    1.自动获取IP地址 虚拟机使用桥接模式,相当于连接到物理机的网络里,物理机网络有DHCP服务器自动分配IP地址. #dhclient 自动获取ip地址命令 #ifconfig 查询系统里网卡信息,i ...

  2. uva11997 K Smallest Sums&&UVALive 3135 Argus(优先队列,多路归并)

    #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #inc ...

  3. PHP JSON文件解析并获取key、value,判断key是否存在

    /****************************************************************************** * PHP JSON文件解析并获取key ...

  4. jq 侧边栏

    HTML 侧边栏HTML代码: <div class="sidebar" id="sucaihuo">     <div class=&quo ...

  5. AngularJs出现错误Error: [ng:areq]

    1.没有对应的控制器 2.有控制器但是路径没有配对

  6. bzoj 1607 [Usaco2008 Dec]Patting Heads 轻拍牛头——枚举倍数

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1607 #include<iostream> #include<cstdio ...

  7. 浅谈Manacher

    \(Manacher\)是由一个叫做\(Manacher\)的人发明的能在\(O(n)\)时间内找出一个字符串长度最长的回文子串的算法. 由于偶回文串形如\(abba\)这样的不好找对称中心,所以我们 ...

  8. java服务覆盖率统计 jacoco ant

    ● 下载jacoco.exec.jacocoant.jar.jacocoagent.jar ● jvm启动参数中添加(tomcat服务原理一样) JACOCO_OPTS=JAVA_OPTS=" ...

  9. Poj 2421 Constructing Roads(Prim 最小生成树)

    题意:有几个村庄,要修最短的路,使得这几个村庄连通.但是现在已经有了几条路,求在已有路径上还要修至少多长的路. 分析:用Prim求最小生成树,将已有路径的长度置为0,由于0是最小的长度,所以一定会被P ...

  10. Angular学习笔记-问题列表(2016.4.7)

    1.控制器中注入服务时,出问题,当前pageInit这个页面无法加载,页面无报错信息. var homepage = angular.module('homepage'); homepage.cont ...