喵哈哈村与哗啦啦村的大战(四)

发布时间: 2017年3月27日 10:10   时间限制: 1000ms   内存限制: 128M

描述

喵哈哈村因为和哗啦啦村争夺稀有的水晶资源,展开了激烈的战斗!

喵哈哈村的部落可以视为由n个节点组成,其中有n-1条边连接这n个节点,使得任意两个节点都会有一条路径相连接。每个节点上都有一个点权a[i]。

如果说存在一条路径上的权值满足非严格的单调递增或者非严格的单调递减的话,就说这条路径是一条好路径。

现在问题来了,给你一棵树,问你这棵树上有多少条路径是好路径。

输入

本题包含若干组测试数据。
第一行一个n,表示有n个节点。
第二行n个整数a[i],表示节点的权值。
接下来n-1行每行两个整数x,y。表示x,y节点之间有一条边相互连接。

满足:1<=n<=100000 1<=a[i]<=1e9 1<=x,y<=n

输出

输出好路径的个数。

样例输入1 复制

4
1 7 1 9
1 3
1 4
2 1

样例输出1

5

题目:http://qscoj.cn/contest/11/problem/50/

题解:http://www.cnblogs.com/qscqesze/p/6635326.html

#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
#define LL long long
vector<int> G[100005];
int val[100005];
LL dp[100005][3], ans;
void Sech(int u, int p)
{int i, v;LL low, up, down;low = up = down = 0;for(i=0;i<G[u].size();i++){v = G[u][i];if(v==p)continue;Sech(v, u);if(val[u]>=val[v])dp[u][1] += dp[v][1]+1, up += dp[v][1]+1;if(val[u]<=val[v])dp[u][0] += dp[v][0]+1, low += dp[v][0]+1;if(val[u]==val[v])dp[u][2] += dp[v][2]+1, down += dp[v][2]+1;}ans += dp[u][1]+dp[u][0]-dp[u][2];for(i=0;i<G[u].size();i++){v = G[u][i];if(v==p)continue;if(val[u]>val[v]){up -= dp[v][1]+1;ans += (dp[v][1]+1)*low;}else if(val[u]<val[v]){low -= dp[v][0]+1;ans += (dp[v][0]+1)*up;}else{low -= dp[v][0]+1;up -= dp[v][1]+1;down -= dp[v][2]+1;ans += (dp[v][0]+1)*up;ans += (dp[v][1]+1)*low;ans -= (dp[v][2]+1)*down;}}
}
int main(void)
{int n, i, u, v;while(scanf("%d", &n)!=EOF){ans = 0;memset(dp, 0, sizeof(dp));for(i=1;i<=n;i++)G[i].clear();for(i=1;i<=n;i++)scanf("%d", &val[i]);for(i=1;i<=n-1;i++){scanf("%d%d", &u, &v);G[u].push_back(v);G[v].push_back(u);}Sech(1, 0);printf("%lld\n", ans);}return 0;
}

喵哈哈村与哗啦啦村的大战(四)(树形DP)相关推荐

  1. 全球首个开发者村启动开村,产业聚力松山湖,共创大湾区创新高地

    摘要:由东莞松山湖管委会.东莞市工业和信息化局与华为云共同主办的松山湖开发者生态创新峰会暨华为开发者大赛中国区启动仪式举行. 打造一流创新生态,与全球开发者共赢.4月26日,由东莞松山湖管委会.东莞市 ...

  2. 喵哈哈村的魔法考试 Round #1 (Div.2) C 喵哈哈村的魔法石(II) 背包dp

    点击打开链接 描述 沈宝宝的天玄石做的又丑又难看,戴尔廖实在是看不下去了,于是就出手帮助了他. 戴尔廖从怀中掏出了很多块神奇的石头,这些石头都是矿石结晶.每颗矿石结晶拥有着的人之精华,以及的地之精华. ...

  3. Java坦克大战 (四) 之子弹的产生

    本文来自:小易博客专栏.转载请注明出处:http://blog.csdn.net/oldinaction 在此小易将坦克大战这个项目分为几个版本,以此对J2SE的知识进行回顾和总结,希望这样也能给刚学 ...

  4. java炮弹_Java坦克大战 (四) 之子弹的产生

    在此小易将坦克大战这个项目分为几个版本,以此对J2SE的知识进行回顾和总结,希望这样也能给刚学完J2SE的小伙伴们一点启示! 坦克大战V0.4实现功能: 1.写一个Missile类,产生一个可运动的子 ...

  5. Java之坦克大战(四)---如何移动坦克

    坦克绘制完成后我们要设置事件,来监听键盘上面对坦克的操作. 然后做出相应的动作来移动坦克. 比如上下左右移动. 今天我们主要演示的是一个小球的运动.来替代坦克. 上一章我们讲解了如何来监听事件的完整过 ...

  6. 喵哈哈村的魔法考试 Round #10 (Div.2) B

    喵哈哈村与哗啦啦村的大战(二) 发布时间: 2017年3月27日 09:25   时间限制: 1000ms   内存限制: 128M 描述 喵哈哈村因为和哗啦啦村争夺稀有的水晶资源,展开了激烈的战斗. ...

  7. 任天堂“红白机之父”上村雅之去世,他曾给千万人带来欢乐

    行早 发自 凹非寺 量子位 报道 | 公众号 QbitAI 立命馆大学游戏研究中心12月9日发布讣告:红白机之父上村雅之教授于2021年12月6日去世,享年78岁. △ 图源:立命馆大学 上村雅之教授 ...

  8. 【关注】3000多警力围剿“毒村”!现实比影视剧更惊险

    https://www.toutiao.com/a6695239094710043149/ 2013年12月29日凌晨,在广东省陆丰市博社村外,悄悄集结了3000多名警力.这是广东警方海陆空联合出动的 ...

  9. 中国城中村改造建设前景规划及投融资模式分析报告2022年版

    中国城中村改造建设前景规划及投融资模式分析报告2022年版 +  [报告目录]:   正文目录    2 图表目录    18 第1章:城中村改造建设发展综述    21 1.1 城中村改造的定义   ...

最新文章

  1. 亏损63亿,美图真能“美”到上市?
  2. bzoj千题计划207:bzoj1879: [Sdoi2009]Bill的挑战
  3. POJ 3368 Frequent values (RMQ)
  4. MemoryCache 使用不当导致的一个 BUG
  5. 艾伦图灵_Java英雄:丹·艾伦
  6. VUE:父子组件间传参、子组件传值给父组件、父组件传值给子组件
  7. python工作状态_[Python设计模式] 第16章 上班,干活,下班,加班——状态模式
  8. 7价 半导体掺杂_模电总结第一章:常用半导体器件
  9. java 解析p12_java读取*.p12证书的信息 | 学步园
  10. sql server order by 的一些高级用法
  11. 计算机桌面设置定时,电脑桌面定时提醒休息如何设置?
  12. [置顶] XMPPFrameWork IOS 开发(六)聊天室
  13. SQLserver的Always On 可用性组
  14. 害怕失败,所以全力以赴
  15. C语言人机大战之决战三子棋之巅
  16. iOS、mac开源项目及库
  17. 达观AI+知识图谱技术在数字档案馆建设中的探索
  18. 数组双指针之快慢指针
  19. 银河英雄传说 ← 带权并查集
  20. django入门(超详细)

热门文章

  1. 用python画多来a梦-python 绘制哆啦A梦
  2. python能做什么-python都能干什么用
  3. python 代码命令大全-深度学习中python常用命令
  4. 语音识别软件、语音识别平台和语音识别技术
  5. 大学计算机文档基本操作实验的效果,上海工程技术大学计算机实验报告5
  6. java简单增删改查_JAVA JDBC 简单的增删改查
  7. Vue2.0 $set()处理数据更新但视图不更新的问题(给对象添加属性必须用this.$set(this.data,”key”,value’))
  8. 【linux笔记】vi和vim编辑器,重定向输出,系统命令,进程,管道
  9. 【动态规划】路径dp:蓝桥2020: 数字三角形
  10. linux检查哪些进程消耗io,Linux 不同方法查看进程消耗CPU IO 等