The 15th UESTC Programming Contest Preliminary B - B0n0 Path cdoj1559
地址: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,
or
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 |
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
#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的更多相关文章
- The 15th UESTC Programming Contest Preliminary J - Jermutat1on cdoj1567
地址:http://acm.uestc.edu.cn/#/problem/show/1567 题目: Jermutat1on Time Limit: 3000/1000MS (Java/Others) ...
- 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 ...
- 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) ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- 【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 ...
- 【字符串哈希】The 16th UESTC Programming Contest Preliminary F - Zero One Problem
题意:给你一个零一矩阵,q次询问,每次给你两个长宽相同的子矩阵,问你它们是恰好有一位不同,还是完全相同,还是有多于一位不同. 对每行分别哈希,先一行一行地尝试匹配,如果恰好发现有一行无法对应,再对那一 ...
随机推荐
- Word中怎么用MathType编辑公式
现如今,用电脑办公学习已经是一个不可阻挡的潮流.而与之相应的就是需要在这些办公软件进行相应的使用,最典型的一种就是要在Word编辑公式.其实在Word中编辑公式是一个很常见的事情,虽然它很常见,但是却 ...
- MathType中怎么设置字体默认颜色
MathType功能非常强大,在编辑公式时使用非常方便.利用MathType破解版不仅可以改变公式的字体和字号,也可以改变公式字体颜色.有时在编辑完成后需要对MathType公式格式全部进行修改,这时 ...
- 目标检测YOLOv1-v3——学习笔记
Fast RCNN更准一些.其损失函数比YOLO简单. YOLO更快 YOLO(You Only Look Once) 简介: 测试过程: 训练过程: 坐标.含有.不含.类别预测 目标检测的效果准确率 ...
- yii 常用orm
yii2 orwhere andwhere的复杂写法:https://www.codercto.com/a/6513.html $files = XXXX::find() ->andWhere( ...
- windows 2003 发布遇到问题---分析器错误消息: 未能加载类型“YWPT.MvcApplication”。
问题如下: “/”应用程序中的服务器错误. ------------------------------------------------------------------------------ ...
- 【iOS开发】获取wifi的SSID
#import <SystemConfiguration/CaptiveNetwork.h> NSArray *ifs = (__bridge_transfer id)CNCopySupp ...
- 让iOS应用支持不同版本的系统与设备
本文转载至 http://blog.csdn.net/pucker/article/details/11980811 最近一直在做app的iOS 6和7的同时适配工作,所以在此介绍一下系统与设备的兼 ...
- 《jquery权威指南2》学习笔记------基础函数
Math.floor(Math.random() * 7 + 1); Math.random() 生成0和1之间的随机小数Math.random() * 7 生成0和7之间的随机小数Math.rand ...
- 在input文本框中存入对象格式的数据
<input id="teaching" type="hidden" name="teachingProgram" /> JQ: ...
- 按批次处理list数据 (list按条数取)
按批次处理list数据的两种方法 主要应用于list存储数据过多,不能使list整体进行其余操作 Java | 复制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...