地址:http://acm.uestc.edu.cn/#/problem/show/1559

题目:

B0n0 Path

Time Limit: 1500/500MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)

There is a country with NN cities, there are roads between some pairs of cities.

For every pair of cities, there is exactly one path between them, on which there are no cities passed more than once.

So it is obvious that there are N−1N−1 roads and N(N−1)2N(N−1)2 paths.

The cities number from 11 to NN, and the ithith city has one number AiAi.

A path is Bono if and only if the numbers AiAi on the path are non-strictly increasing or decreasing.

i.e., if the numbers are Ab1,Ab2,…,AbmAb1,Ab2,…,Abm,

Abi≤Abi+1 ,∀1≤i<mAbi≤Abi+1 ,∀1≤i<m

or

Abi≥Abi+1 ,∀1≤i<mAbi≥Abi+1 ,∀1≤i<m

should be satisfied.

How many Bono paths in the country?

Input

The first line contains one integer NN.

The second line contains NN integers, where the ithith indicates AiAi.

For the next N−1N−1 lines, each line contains two integers u,vu,v, meaning that there is a road between uthuth city and vthvth city.

1≤N≤105,1≤u,v≤N,1≤Ai≤1091≤N≤105,1≤u,v≤N,1≤Ai≤109

Output

One integer indicating the number of bono paths in the country.

Sample input and output

Sample Input Sample Output
4
1 7 1 9
1 3
1 4
2 1
5
6
1 1 2 2 3 3
1 2
2 3
3 4
4 5
5 6
15

Hint

For sample 1:

The format of the text on ithith node is (i:Ai)(i:Ai).

There are 5 bono paths: (1,2),(1,3),(1,4),(2,1,3),(3,1,4)(1,2),(1,3),(1,4),(2,1,3),(3,1,4), while path (2,1,4)(2,1,4) is not bono path.

For sample 2:

All path are bono paths.

Source

The 15th UESTC Programming Contest Preliminary
思路:树形dp
  dp[x][0]:表示从x的子孙节点出发的路径,并且路径上所有点权值都相等的路径数
  dp[x][0]:表示从x的子孙节点出发的路径,并且路径上所有点权值是严格递增的路径数
  dp[x][0]:表示从x的子孙节点出发的路径,并且路径上所有点权值是严格递减的路径数
具体转移过程见代码吧:
 #include <bits/stdc++.h>

 using namespace std;

 #define MP make_pair
#define PB push_back
typedef long long LL;
typedef pair<int,int> PII;
const double eps=1e-;
const double pi=acos(-1.0);
const int K=1e6+;
const int mod=1e9+;
vector<int>mp[K];
int n,val[K];
LL dp[K][];
LL ans; void dfs(int x,int f)
{
for(int i=;i<mp[x].size();i++)
{
int v=mp[x][i];
if(v==f) continue;
dfs(v,x);
if(val[v]<val[x])
{
ans+=(dp[x][]+dp[x][])*(dp[v][]+dp[v][]+);
dp[x][]+=dp[v][]+dp[v][]+;
}
else if(val[v]>val[x])
{
ans+=(dp[x][]+dp[x][])*(dp[v][]+dp[v][]+);
dp[x][]+=dp[v][]+dp[v][]+;
}
else
{
ans+=dp[x][]*(dp[v][]+dp[v][]+dp[v][]+)+dp[x][]*(dp[v][]+dp[v][]+)+dp[x][]*(dp[v][]+dp[v][]+);
dp[x][]+=dp[v][]+;
dp[x][]+=dp[v][];
dp[x][]+=dp[v][];
}
}
ans+=dp[x][]+dp[x][]+dp[x][];
//cout<<"x="<<x<<" "<<dp[x][0]<<" "<<dp[x][1]<<" "<<dp[x][2]<<" "<<ans<<endl;
//printf("x=%I64d %I64d %I64d %I64d\n",x,dp[x][0],dp[x][1],dp[x][2]);
} int main(void)
{
cin>>n;
for(int i=;i<=n;i++)
scanf("%d",val+i);
for(int i=,x,y;i<n;i++)
scanf("%d%d",&x,&y),mp[x].PB(y),mp[y].PB(x);
dfs(,);
cout<<ans<<endl;
return ;
}

The 15th UESTC Programming Contest Preliminary B - B0n0 Path cdoj1559的更多相关文章

  1. The 15th UESTC Programming Contest Preliminary J - Jermutat1on cdoj1567

    地址:http://acm.uestc.edu.cn/#/problem/show/1567 题目: Jermutat1on Time Limit: 3000/1000MS (Java/Others) ...

  2. The 15th UESTC Programming Contest Preliminary C - C0ins cdoj1554

    地址:http://acm.uestc.edu.cn/#/problem/show/1554 题目: C0ins Time Limit: 3000/1000MS (Java/Others)     M ...

  3. The 15th UESTC Programming Contest Preliminary K - Kidd1ng Me? cdoj1565

    地址:http://acm.uestc.edu.cn/#/problem/show/1565 题目: Kidd1ng Me? Time Limit: 3000/1000MS (Java/Others) ...

  4. The 15th UESTC Programming Contest Preliminary M - Minimum C0st cdoj1557

    地址:http://acm.uestc.edu.cn/#/problem/show/1557 题目: Minimum C0st Time Limit: 3000/1000MS (Java/Others ...

  5. The 15th UESTC Programming Contest Preliminary G - GC?(X,Y) cdoj1564

    地址:http://acm.uestc.edu.cn/#/problem/show/1564 题目: G - GC?(X,Y) Time Limit: 3000/1000MS (Java/Others ...

  6. The 15th UESTC Programming Contest Preliminary H - Hesty Str1ng cdoj1551

    地址:http://acm.uestc.edu.cn/#/problem/show/1551 题目: Hesty Str1ng Time Limit: 3000/1000MS (Java/Others ...

  7. The 15th UESTC Programming Contest Preliminary D - Destr0y City cdoj1558

    地址:http://acm.uestc.edu.cn/#/problem/show/1558 题目: D - Destr0y City Time Limit: 3000/1000MS (Java/Ot ...

  8. 【set】【可持久化Trie】The 16th UESTC Programming Contest Preliminary K - Will the circle be broken

    题意:You are given an array A of N non-negative integers and an integer M. Find the number of pair(i,j ...

  9. 【字符串哈希】The 16th UESTC Programming Contest Preliminary F - Zero One Problem

    题意:给你一个零一矩阵,q次询问,每次给你两个长宽相同的子矩阵,问你它们是恰好有一位不同,还是完全相同,还是有多于一位不同. 对每行分别哈希,先一行一行地尝试匹配,如果恰好发现有一行无法对应,再对那一 ...

随机推荐

  1. [深入理解Android卷一全文-第八章]深入理解Surface系统

    由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版.而知识的传播不应该由于纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容. ...

  2. Sql创建约束

    add constraint pk_studentno primary key(StudentNo) //主键 add constraint fk_student_grade_gradeid fore ...

  3. Java Web项目BlogAutoGenerator编写日志1

    使用的数据库是MySQL,所以首先要在MySQL中创建database和表.建立数据库article_db,建立表blog,如下: create database article_db DEFAULT ...

  4. 1854: [Scoi2010]游戏[并查集]

    1854: [Scoi2010]游戏 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 4938  Solved: 1948[Submit][Status] ...

  5. java enum(枚举)使用详解 + 总结(转载)

    enum 的全称为 enumeration, 是 JDK 1.5  中引入的新特性,存放在 java.lang 包中. 下面是我在使用 enum 过程中的一些经验和总结,主要包括如下内容: 1. 原始 ...

  6. 160512、nginx+多个tomcat集群+session共享(windows版)

    第一步:下载nginx的windows版本,解压即可使用,点击nginx.exe启动nginx 或cmd命令 1.启动: D:\nginx+tomcat\nginx-1.9.3>start ng ...

  7. 160506、Spring mvc新手入门(11)-返回json 字符串的其他方式

    Spring MVC返回 json字符串的方式有很多种方法,这里介绍最简单,也是最常使用的两种方式 一.使用  PrintWriter printWriter  直接输出字符串到返回结果中    不需 ...

  8. 160328、rabbitMQ集群部署示例

    环境:Centos 6.5 x86_64MQ网址:http://www.rabbitmq.com/SERVER101\SERVER102 SERVER103 一.单节点安装 #yum install ...

  9. git 学习(3)文件删除恢复

    git学习(3) 撤销编辑 如果我们在编辑版本a的时候,如果在没有add之前,发现需要重新编辑版本a怎么办呢,可以通过git reset --hard comm_id, commit_id是版本a的提 ...

  10. 前端开发 - jsDom

    一.jsDom简介 jsDom = javascript document object model在JS中,所有的事物都是节点,元素.文本等都是节点.应用场景:可以通过节点进行DOM对象的增删改查 ...