题目传送门

 1 /*
 2     题意:给一个树,节点上有权值,问最多能找出多少个点满足在树上是连通的并且按照权值排序后相邻的点
 3         在树上的路径权值都小于这两个点
 4     DFS/BFS+思维:按照权值的大小,从小的到大的连有向边,搜索最多连接点数即是答案。因为排序后,他们之间的路径,
 5         可定都是从当前节点u连过去的,那么都是小于这两个节点的。DFS需手动加栈,BFS类似拓扑排序的思路
 6 */
 7 #pragma comment (linker, "/STACK:1024000000,1024000000")
 8 #include <cstdio>
 9 #include <cstring>
10 #include <algorithm>
11 #include <vector>
12 using namespace std;
13
14 const int MAXN = 5e5 + 10;
15 const int INF = 0x3f3f3f3f;
16 int w[MAXN];
17 int cnt[MAXN];
18 vector<int> G[MAXN];
19 int n;
20
21 void DFS(int u) {
22     cnt[u] = 1;
23     for (int i=0; i<G[u].size (); ++i)  {
24         int v = G[u][i];
25         if (!cnt[v])    DFS (v);
26         cnt[u] += cnt[v];
27     }
28 }
29
30 int main(void)  {       //HDOJ 5325 Crazy Bobo
31     //freopen ("J.in", "r", stdin);
32
33     while (scanf ("%d", &n) == 1)   {
34         for (int i=1; i<=n; ++i)    scanf ("%d", &w[i]);
35         for (int i=1; i<=n; ++i)    G[i].clear ();
36         for (int i=1; i<=n-1; ++i)  {
37             int u, v;   scanf ("%d%d", &u, &v);
38             if (w[u] < w[v])  G[u].push_back (v);
39             else    G[v].push_back (u);
40         }
41         memset (cnt, 0, sizeof (cnt));
42         for (int i=1; i<=n; ++i)    {
43             if (cnt[i]) continue;
44             DFS (i);
45         }
46         int ans = 0;
47         for (int i=1; i<=n; ++i)    ans = max (ans, cnt[i]);
48         printf ("%d\n", ans);
49     }
50
51     return 0;
52 }

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <vector>
 5 #include <queue>
 6 using namespace std;
 7
 8 const int MAXN = 5e5 + 10;
 9 const int INF = 0x3f3f3f3f;
10 int w[MAXN];
11 int cnt[MAXN];
12 int deg[MAXN];
13 vector<int> G[MAXN];
14 int n;
15
16 int BFS(void)   {
17     queue<int> Q;   int ret = 0;
18     for (int i=1; i<=n; ++i)    cnt[i] = 1;
19     for (int i=1; i<=n; ++i)    {
20         if (!deg[i])    Q.push (i);
21     }
22     while (!Q.empty ()) {
23         int u = Q.front (); Q.pop ();
24         ret = max (ret, cnt[u]);
25         for (int i=0; i<G[u].size (); ++i)   {
26             int v = G[u][i];
27             cnt[v] += cnt[u];
28             if (!(--deg[v]))    Q.push (v);
29         }
30     }
31     return ret;
32 }
33
34 int main(void)  {
35     //freopen ("J.in", "r", stdin);
36
37     while (scanf ("%d", &n) == 1)   {
38         for (int i=1; i<=n; ++i)    scanf ("%d", &w[i]);
39         for (int i=1; i<=n; ++i)    G[i].clear ();
40         memset (deg, 0, sizeof (deg));
41         for (int i=1; i<=n-1; ++i)  {
42             int u, v;   scanf ("%d%d", &u, &v);
43             if (w[u] < w[v])    swap (u, v);
44             G[u].push_back (v); deg[v]++;
45         }
46         printf ("%d\n", BFS ());
47     }
48
49     return 0;
50 }

BFS 标程做法

转载于:https://www.cnblogs.com/Running-Time/p/4685195.html

DFS/BFS+思维 HDOJ 5325 Crazy Bobo相关推荐

  1. hdu 5325 Crazy Bobo dfs

    // hdu 5325 Crazy Bobo // // 题目大意: // // 给你一棵树,树上每一个节点都有一个权值w,选择尽可能多的节点, // 这些节点相互联通,而且依照权值升序排序之后得到节 ...

  2. 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)

    [题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因 ...

  3. POJ2308连连看dfs+bfs+优化

    DFS+BFS+MAP+剪枝 题意:       就是给你一个10*10的连连看状态,然后问你最后能不能全部消没? 思路:      首先要明确这是一个搜索题目,还有就是关键的一点就是连连看这个游戏是 ...

  4. 链式前向星模板 建图+dfs+bfs+dijkstra

    边没有用struct封装起来,节点和边的计数起点如果不符合习惯可以稍作修改 建图+DFS+BFS #include <cstdio> #include <cstring> #i ...

  5. 算法 - DFS/BFS

    DFS函数大概率会传递"位置信息",根据位置信息获取下一步的选择,(大部分是在循环中)选择.执行.回退 例如N皇后的 棋盘位置(x, y),组合问题的 idx DFS函数的目的是, ...

  6. [Leetcode][第130题][JAVA][被围绕的区域][DFS][BFS]

    [问题描述][中等] [解答思路] 1. 深度优先搜索 使用深度优先搜索实现标记操作.在下面的代码中,我们把标记过的字母 O 修改为字母 A. 复杂度 class Solution {int[] dx ...

  7. 1.5万字详述 | 全开源:python写小游戏+AI强化学习与传统DFS/BFS控制分别实现

    简介:本周的强化学习我们来到实践部分.我以我在 GitHub 上开源的项目 PiperLiu / Amazing-Brick-DFS-and-DRL 为对象,从零开始与各位朋友分享:如何用 pytho ...

  8. java bfs dfs_java优先搜索(DFS/BFS)实际应用

    深度优先搜索DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.广度优先搜索BFS是Breadth First Sear ...

  9. 洛谷 P1710 地铁涨价 (dfs+bfs)

    地铁涨价 题目描述 博艾市除了有海底高铁连接中国大陆.台湾与日本,市区里也有很成熟的轨道交通系统.我们可以认为博艾地铁系统是一个无向连通图.博艾有N个地铁站,同时有M小段地铁连接两个不同的站. 地铁计 ...

  10. ROB 第一篇 DFS BFS (寻迹算法)

    ROB 第一篇 DFS & BFS DFS & BFS 简单介绍 原理 DFS BFS 总结 DFS & BFS 简单介绍 DFS (depth first search) 和 ...

最新文章

  1. 构筑你的本地资料库——ScrapBook
  2. 2012-5-3 线程和进程的区别
  3. 信息系统项目管理师之风险管理
  4. 【数字图像处理】一.MFC详解显示BMP格式图片
  5. C# 7.1、7.2特性追踪
  6. 【算法小积累】 - 提取非0数最右侧的1
  7. 成熟就是深谙世故却不世故
  8. java怎么使用泛型_java泛型 7 泛型的基本介绍和使用
  9. jquery ajax 异步分页,jquery 分页 Ajax异步
  10. BugkuCTF-Crypto题一段Base64
  11. activiti创建子流程_OA流程图绘制指南
  12. Atitit 效率提升分析与解决方案 1. 三大模式 优化资源配置 通过降低难度 提升培训 1 1.1. 优化资源配置 1 1.2. 通过降低难度 1 1.3. 提升培训 1 2. 有效与立即可
  13. diy服务器个人主机_DIY双路服务器之个人主机
  14. linux环境sphinx搭建,Sphinx安装配置应用
  15. 短信平台市场蒸蒸日上的根本原因
  16. Numpy 中的矩阵向量乘法
  17. 2019浙江ACM省赛部分题解-ABDEFGHIJK
  18. 什么是微分?导数和微分的区别是什么?微分和积分的联系?
  19. 再见,Python正则表达式!
  20. ai换脸明显_为什么我们应该真正害怕AI:对明显和非明显危险的分析

热门文章

  1. java-php-python-ssm学生学籍信息管理系统计算机毕业设计
  2. mysql count sending data_mysql查询sending data占用大量时间的问题处理
  3. rop检查_【国际高影响力文章红毯秀7月】白内障扩瞳安全性、ROP筛查新标准、45mmHg眼内灌注压...
  4. 计算机主板 也叫系统板或母版,电脑主板与CPU常见故障维修
  5. 使用电容触摸屏做画板——软件IIC(二)
  6. 产品读书《关键对话:如何高效能沟通》
  7. 如何在WhatsApp中设置两步验证
  8. undefined reference to 的报错原因记录
  9. ASEMI肖特基二极管MBR10100FCT关键参数及选型要点
  10. C语言limits.h和float.h头文件