博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2015 Multi-University Training Contest 3 hdu 5325 Crazy Bobo
阅读量:4584 次
发布时间:2019-06-09

本文共 2285 字,大约阅读时间需要 7 分钟。

Crazy Bobo

Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)

Total Submission(s): 1334    Accepted Submission(s): 410

Problem Description
Bobo has a tree,whose vertices are conveniently labeled by 1,2,...,n.Each node has a weight 
wi. All the weights are distrinct.
A set with m nodes v1,v2,...,vm is a Bobo Set if:
- The subgraph of his tree induced by this set is connected.
- After we sort these nodes in set by their weights in ascending order,we get u1,u2,...,um,(that is,wui<wui+1 for i from 1 to m-1).For any node x in the path from ui to ui+1(excluding ui and ui+1),should satisfy wx<wui.
Your task is to find the maximum size of Bobo Set in a given tree.
 

 

Input
The input consists of several tests. For each tests:
The first line contains a integer n (
1n500000). Then following a line contains n integers w1,w2,...,wn (1wi109,all the wi is distrinct).Each of the following n-1 lines contain 2 integers ai and bi,denoting an edge between vertices ai and bi (1ai,bin).
The sum of n is not bigger than 800000.
 

 

Output
For each test output one line contains a integer,denoting the maximum size of Bobo Set.
 

 

Sample Input
7
3 30 350 100 200 300 400
1 2
2 3
3 4
4 5
5 6
6 7
 

 

Sample Output
5
 

 

Author
ZSTU
 

 

Source
 

 解题:直接搜索。。。建立有向图时候,小权向大权的连边,然后看看每个每个点,最多能走多少个点。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #pragma comment(linker, "/stack:1024000000,1024000000") 7 using namespace std; 8 const int maxn = 500010; 9 vector
g[maxn];10 int w[maxn],ret[maxn];11 void dfs(int u) {12 ret[u] = 1;13 for(int i = g[u].size()-1; i >= 0; --i) {14 if(!ret[g[u][i]]) dfs(g[u][i]);15 ret[u] += ret[g[u][i]];16 }17 }18 int main() {19 int n,u,v;20 while(~scanf("%d",&n)){21 for(int i = 1; i <= n; ++i){22 scanf("%d",w+i);23 g[i].clear();24 }25 for(int i = 1; i < n; ++i){26 scanf("%d%d",&u,&v);27 if(w[u] < w[v]) g[u].push_back(v);28 else g[v].push_back(u);29 }30 memset(ret,0,sizeof ret);31 int ans = 0;32 for(int i = 1; i <= n; ++i){33 if(!ret[i]) dfs(i);34 ans = max(ans,ret[i]);35 }36 printf("%d\n",ans);37 }38 return 0;39 }
View Code

 

转载于:https://www.cnblogs.com/crackpotisback/p/4695504.html

你可能感兴趣的文章
源码安装cmake(或者叫升级cmake)
查看>>
maven的pom.xml样例
查看>>
python正则表达式基础,以及pattern.match(),re.match(),pattern.search(),re.search()方法的使用和区别...
查看>>
使用numpy的routines函数创建
查看>>
欧拉回路的典型应用
查看>>
Sciter TIScript KeyEvent
查看>>
stm32工程模板的创建
查看>>
Oracle行转列和列转行
查看>>
linux software
查看>>
Jquery的一些简单使用记录
查看>>
Python学习之路【第二篇】-pyc简介、Python常用的数据类型及其用法和常用运算符...
查看>>
hdu 2680 Choose the best route
查看>>
老李分享:锁定客户的六大策略:教你如何将切换成本嵌入商业模式 2
查看>>
iframe滚动条的一些方法
查看>>
09_传智播客iOS视频教程_@property
查看>>
MySQL学习记录一
查看>>
多线程理论———— threading
查看>>
PLSA及EM算法
查看>>
Oracle GoldenGate 12c实时捕获SQL Server数据
查看>>
buaa 1033 easy problom(三分搜索)
查看>>