传送门

分析

经典的树型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. power designer 设计数据库生成到oracle数据库

    一.概念模型设计 1. 创建工程,创建概念设计模型,在快捷菜单栏调出 palette 找到表格工具,在主界面中创建表格. 2. 创建出的表格,双击进入设计模式 -------------------- ...

  2. 非root用户 如何将cscope安装到指定目录,vim74安装

    随着Linux的普及,使用Linux进行软件开发的人也越来越多.而大多数公司都采用这种方式:提供一台高性能的中央服务器做为开发编译服务器,每个人登录这台服务器进行开发编译.在这种情况下,用户通常没有r ...

  3. bzoj5457 城市

    一棵树,每个点有一个民族,和一个人数,求每个子树里最多的民族及其人数,如果一样,输出编号最小的 $n \leq 500000$ sol: 卡莫队的毒瘤题,需要 dsu on tree 大概就是 dfs ...

  4. Python之用虚拟环境隔离项目,并重建依赖关系

    下面将以安装django和mysqlclient介绍如何用虚拟环境隔离项目,并重建依赖关系.操作系统:windows 10:python版本:python3.7 1. 安装python虚拟环境 (1) ...

  5. shell 去重

    group=`cat config.properties  |            grep -v "^$" |                 grep -v "^# ...

  6. Yii 利用layer删除数据

    一.视图 <tr id="rm_<?php echo $v->category_id;?>"> <td><?php echo $v- ...

  7. Java 时间工具类

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  1.Calendar 转化 String  ...

  8. Maven里头的pom.xml配置详解

    正常的pom配置文件如下所示: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http ...

  9. ADMEMS软件架构的4个阶段

    业界软件架构设计的方法论很多,各有各自的应用场景和特点,下文结合ADMEMS(Architecture Design Method has been Extended to Method System ...

  10. MySQL insert插入

    使用INSERT语句插入新数据 语法:INSERT [INTO] tbl_name [(col_name,...)] VALUES (pression,...),…      INSERT [INTO ...