题意

有一棵n个结点的树,每个结点都有一个值,没一条边都有一个颜色。如果某条路径上,相邻的边颜色不同,那么把这路径上所有的点的值加起来。 输出所有符合条件的路径上值的和。 n<=300000。

分析

场上读错题了。当时以为是路径上所有的边都不能有相同的颜色,雾。。。

树形DP。

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
const int maxn=+;
int head[maxn],Next[*maxn],to[*maxn],col[*maxn],val[maxn];
int n,sz;
long long ans;
void add_edge(int a,int b,int c){
sz++;
to[sz]=b;
col[sz]=c;
Next[sz]=head[a];
head[a]=sz;
}
long long f[maxn],num[maxn];
void dp(int u,int fa,int co){
long long alltmp=,allnum=;
num[u]=;f[u]=val[u];
map<int,long long>Mdp;
map<int,long long>Mnum; for(int i=head[u];i;i=Next[i]){
int v=to[i];
if(v!=fa){
dp(v,u,col[i]);
if(co!=col[i]){
f[u]+=f[v]+val[u]*num[v];
num[u]+=num[v];
}
ans+=f[v]+val[u]*num[v];
alltmp+=f[v]+val[u]*num[v];
allnum+=num[v];
Mnum[col[i]]+=num[v];
Mdp[col[i]]+=f[v]+val[u]*num[v];
}
}
long long temp=;
for(int i=head[u];i;i=Next[i]){
if(to[i]!=fa){
temp+=f[to[i]]*(allnum-Mnum[col[i]])+num[to[i]]*(alltmp-Mdp[col[i]]);
}
}
ans+=temp/;
}
int main(){
while(scanf("%d",&n)!=EOF){
ans=;
memset(head,,sizeof(head));
sz=;
for(int i=;i<=n;i++)
scanf("%d",&val[i]);
int a,b,c;
for(int i=;i<n;i++){
scanf("%d%d%d",&a,&b,&c);
add_edge(a,b,c);
add_edge(b,a,c);
}
dp(,,);
printf("%lld\n",ans);
}
return ;
}

最新文章

  1. Java中对session的简单操作
  2. SQL中关于字符串的处理
  3. 使用 SharedPreferences 实现数据的存储和读取
  4. webconfig和appconfig中出现特殊字符如何处理
  5. angularJs中将字符串转换为HTML格式
  6. 理解C#系列 / C#语言的特性
  7. 【转】简明vim练级攻略
  8. python_Opencv_图像的基础操作
  9. Java之IO流补充
  10. 基于MATLAB边缘检测算子的实现
  11. iOS NFC
  12. Linux增加开放端口号
  13. styled-components解决全局样式&#39;injectGlobal&#39; 废除的问题
  14. linux 下修改etc/profile文件
  15. OkHttp3源码详解(五) okhttp连接池复用机制
  16. 透彻掌握Promise的使用
  17. linux中pam模块
  18. JMeter性能测试基础 (4)-使用JMeter录制测试脚本
  19. 大数据入门第十四天——Hbase详解(三)hbase基本原理与MR操作Hbase
  20. Android中获取屏幕长宽的方法

热门文章

  1. Android 进阶7:进程通信之 AIDL 的使用
  2. 学习Java有没有什么捷径?
  3. php语法笔记
  4. linux中文件或者文件夹的基本操作(复制,移动,删除,查找,压缩)
  5. win键盘映射成mac键盘
  6. Cam350导入Allegro的*.rou文件
  7. windows中文编码报错 com.google.gson.JsonIOException: java.nio.charset.MalformedInputException: Input length = 1
  8. javaMail邮件接收解析内容及附件 及删除邮件
  9. 【转】使用Jmeter测试Webservice简单示例
  10. 怎么样使用yum来安装mysql