题目描述

 “我是番茄酱!”
“我是黄芥末酱!”
“合在一起就是——美式热狗上加的,那个!“
热狗树上的每个节点都涂有番茄酱或者黄芥末酱中的一种,这样热狗树就变得美味了~LiMn2O4构造了一颗热狗树,他想知道这棵树的美味程度。
一个热狗树的美味程度,定义为每个节点到其他和自己口味不一样的节点的最短距离之和的和,也就是任意两个口味不同的节点之间的路径长度和。请你求出这颗树的美味值,并且答案对998244353取模。

 

输入

第一行一个正整数N。
第二行有N个数,他们的值在[0,1]范围内取,其中1代表是涂了番茄酱,0代表是涂了黄芥末酱。
接下来N-1行,每一行有三个数a,b,w。代表节点a到b有边,路径的权值是w。输入数据保证是一棵树。
N≤100000,1≤a,b≤N,w<1 000 000 000

 

输出

输出答案对998244353取模后的结果。

样例输入

3
1 0 1
1 2 1
1 3 2

样例输出

8

提示

树(tree)是包含n(n>=0)个结点的有穷集,其中:
(1)每个元素称为结点(node);
(2)有一个特定的结点被称为根结点或树根(root)。
(3)除根结点之外的其余数据元素被分为m(m≥0)个互不相交的集合T1,T2,……Tm-1,其中每一个集合Ti(1<=i<=m)本身也是一棵树,被称作原树的子树(subtree)。

  很裸的一个树形dp,sb的一直在用点算,其实直接以边的角度来看,每条边的贡献值就是,2ll*(子节点子树为1的数目*(总0数目-子节点子树为0的数目)*边权+子节点子树为0的数目*(总1数目-子节点子树为1的数目)*边权)

  也就是看这条边两边为0和为1的情况。

 #include<cstdio>
typedef long long ll;
const int N=,mod=;
struct Side{
int v,ne;
ll w;
}S[N<<];
int sn,head[N],size[N][],a[N],num[];
ll ans;
void init(int n)
{
sn=;
ans=;
num[]=num[]=;
for(int i=;i<=n;i++){
head[i]=-;
size[i][]=size[i][]=;
}
}
void add(int u,int v,int w)
{
S[sn].v=v;
S[sn].w=1ll*w;
S[sn].ne=head[u];
head[u]=sn++;
}
void dfs(int u,int f)
{
size[u][]=(a[u]==);
size[u][]=(a[u]==);
for(int i=head[u],v;~i;i=S[i].ne){
v=S[i].v;
if(v!=f){
dfs(v,u);
size[u][]+=size[v][];
size[u][]+=size[v][];
ans=(ans+2ll*size[v][]*(num[]-size[v][])*S[i].w%mod)%mod;
ans=(ans+2ll*size[v][]*(num[]-size[v][])*S[i].w%mod)%mod;
}
}
}
int main()
{
int n,u,v,w;
while(~scanf("%d",&n)){
init(n);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
num[]+=(a[i]==);
num[]+=(a[i]==);
}
for(int i=;i<n;i++){
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
add(v,u,w);
}
dfs(,);
printf("%lld\n",ans);
}
return ;
}

看边啊

第四届西安邮电大学acm-icpc校赛 热狗树的更多相关文章

  1. 第四届西安邮电大学acm-icpc校赛 猜球球

    题目描述 六一到了,为了庆祝这个节日,好多商家都推出了很多好玩的小游戏.Tongtong看到了一个猜球球的游戏,有n种除了颜色之外完全相同的球,商家从中拿出来一个球球放到了箱子里,已知第i种颜色的球出 ...

  2. 第四届西安邮电大学acm-icpc校赛 流浪西邮之寻找火石碎片 多体积条件背包

    题目描述 众所周知,由于木星引力的影响,世界各地的推进发动机都需要进行重启.现在你接到紧急任务,要去收集火石碎片,重启西邮发动机.现在火石碎片已成为了稀缺资源,获得火石碎片需要钱或者需要一定的积分.火 ...

  3. 北方大学 ACM 多校训练赛 第七场 C Castle(LCA)

    [题意]给你N个点,N条不同的边,Q次询问,求出u,v之间的最短路. [分析]题意很简单,就是求最短路,但是Q次啊,暴力DIJ?当然不行,观察到这个题边的数目和点的数目是相同的,也就是说这个图是由一棵 ...

  4. 近几年ACM/ICPC区域赛铜牌题

    2013 changsha zoj 3726 3728 3736 3735 2013 chengdu hud 4786 4788 4790 2013 hangzhou hdu 4770 4771 47 ...

  5. 2016 ACM/ICPC 区域赛(北京) E 题 bfs

    https://vjudge.net/problem/UVALive-7672 题意    输入一个五位数n 问由12345变到n的操作最少次数 不可达输出-1 有三种操作 1.交换相邻的位置 次数不 ...

  6. ACM/ICPC 之 数据结构-线段树+区间离散化(POJ2528)

    这道题用线段树做更方便更新和查询,但是其数据范围很大,因此要将离散化和线段树结合起来,算是一道比较经典的线段树+离散化的例题. 线段树的离散化有很多方法,在这里,我先用一次结点离散化,间接将源左右端点 ...

  7. ACM/ICPC 之 数据结构-线段树思想(POJ2182,含O(n^2)插入式解法)

    这道题在一定程度上体现了线段树的一种用法,解决的问题是:对于总计n个元素的第i个元素,已知其在[1,i]上部分序列的排名,求第i个元素在所有n个元素中的排名. 当然这道题数据比较水,所以用O(n^2) ...

  8. 2014哈商大ICPC/ACM校赛解题报告

    被debug邀请去參加校赛,哎,被虐..我对不起工大.. 由于本人不搞ACM,算法处于HelloWorld水准.. 虽然题目除了鸟不拉屎星人之外都非常水,但我能做到这个程度,全然是超水平发挥了.. 数 ...

  9. 2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)

    队名:Unlimited Code Works(无尽编码)  队员:Wu.Wang.Zhou 先说一下队伍:Wu是大三学长:Wang高中noip省一:我最渣,去年来大学开始学的a+b,参加今年区域赛之 ...

随机推荐

  1. 题目13 在O(1)时间删除链表节点

    ///////////////////////////////////////////////////////////////////////////////////// // 3. 题目13 在O( ...

  2. Idea中maven的设置

    File->setting    输入MAVEN     看到右侧设置情况     Maven home directory 熟路本地moven 仓库目录:D:/springboot/apach ...

  3. linux 对外开放端口

    查看守护进程端口 netstat -ntpl 查看开放的端口 iptables -nvL 查看端口是否可访问:telnet ip 端口号 (如本机的35465:telnet localhost 354 ...

  4. thymeleaf 模板使用 提取公共页面

    切记!!!thymeleaf模板的使用,姿势很重要!!!姿势不对,可能导致样式.js等的使用受到影响 前台开发中,由于页面目录结构不同,可能导致引入的公共页面中的的跳转路径在部分页面能用,部分页面不能 ...

  5. C语言快速判断素数——不超时

    这属于算法上的问题,好好考虑一下算法,还要考虑一下素数的定义. 素数是只有1和本身能整除的整数.所以在求素数的时候,要将素数与1到素数本身中间的所有整数都相除,看是否有整除的数,如果有,那肯定不是素数 ...

  6. javascript——获取元素方式

    //1:依据id //var element = document.getElementById("test"); console.log(element); //2:依据clas ...

  7. printf颜色

    格式 printf("\033[?m%s\033[0m", str); 多个属性以:分隔 属性: \033[0m:关闭所有属性 \033[1m:设置高亮度 \033[4m:下划线 ...

  8. linux基础2-cd、mkdir、touch、umask、chattr、lsattr、SUID/SGID/Sticky Bit

    一 cd : . 代表当前目录 .. 代表上一层目录 - 代表前一个工作目录 ~ 代表[目前用户身份]所在的自家目录 与cd效果相同 ~account 代表 account 这个用户的自家家目录 二m ...

  9. Hadoop_13_Hadoop Shell脚本采集日志上传到HDFS

    案例1:开发shell采集脚本 1.点击流日志每天都10T,在业务应用服务器上,需要准实时上传至数据仓库(Hadoop HDFS)上 2.一般上传文件都是在凌晨24点操作,由于很多种类的业务数据都要在 ...

  10. Centos7 docker、harbor 安装配置

    Docker 安装 wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo wget ...