题干:

链接:https://ac.nowcoder.com/acm/contest/157/B
来源:牛客网

题目描述

传说,凤凰是百鸟之王。有一天,凤凰要召开百鸟大会,百鸟国是一个由n个节点组成的树,每个节点有一只鸟,开会的节点定在1号节点。每只鸟可以花费1s通过一条边,由于每根树枝(边)的载重有限,只允许一只鸟同时通过。作为会议的策划师,HtBest想知道百鸟国的所有鸟在1点集合最少需要多少秒。

输入描述:

第一行有一个正整数n,表示百鸟国节点个数。
接下来n-1行,第i行两个正整数ai,bi用空格隔开,表示树上节点ai,bi之间有一条边。

输出描述:

第一行一个整数,表示集合最少需要的时间。

示例1

输入

复制

3
1 2
2 3

输出

复制

2

示例2

输入

复制

3
1 2
1 3

输出

复制

1

示例3

输入

复制

4
1 2
2 3
2 4

输出

复制

3

备注:

对于100%的测试数据:
1 ≤ n ≤ 1000000
数据量较大,注意使用更快的输入输出方式。

解题报告:

这题用dfs会超时我也不知道为什么。O(n)的复杂度。。。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 2e6 + 5;
int n,m;
vector<int> vv[MAX];
int dfs(int cur,int rt) {int res = 1;for(auto& v : vv[cur]) {if(v == rt) continue;res += dfs(v,cur);}return res;
}
inline int read() {char ch = getchar(); int x = 0, f = 1;while(ch < '0' || ch > '9') {if(ch == '-') f = -1;ch = getchar();} while('0' <= ch && ch <= '9') {x = x * 10 + ch - '0';ch = getchar();} return x * f;
}
int f[MAX],num[MAX];
int getf(int v) {return f[v] == v ? v : f[v] = getf(f[v]);
}
bool merge(int u,int v) {int  t1 = getf(u);int t2 = getf(v);if(t1 == t2) {return 1;}else {f[t2] = t1;num[t1] += num[t2];return 0 ;}
}
int main()
{cin>>n;for(int i = 1; i<=n; i++) f[i] = i,num[i]=1;for(int a,b,i = 1; i<=n-1; i++) {a=read();b=read();if(a!=1 && b!=1) merge(a,b);}int ans = 0 ;for(int i = 1; i<=n; i++) {ans = max(ans,num[getf(i)]);}cout << ans;return 0;
}

TLE代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 2e6 + 5;
int n,m;
vector<int> vv[MAX];
int dfs(int cur,int rt) {int res = 1;for(auto v : vv[cur]) {if(v == rt) continue;res += dfs(v,cur);}return res;
}
int main()
{cin>>n;for(int a,b,i = 1; i<=n-1; i++) {scanf("%d%d",&a,&b);vv[a].pb(b);vv[b].pb(a);}int ans = 0 ;for(auto v : vv[1]) {ans = max(ans,dfs(v,1));}cout << ans;return 0;
}

【牛客 - 157B】凤凰(树上并查集,dfs)相关推荐

  1. 牛客题目 - 白色相簿(并查集)

    牛牛的Fib序列 Problem Description 链接:https://ac.nowcoder.com/acm/problem/20793 来源:牛客网 众所周知,一个人或两个人之间的关系是最 ...

  2. 2020牛客多校G[并查集的两种思想,按秩合并+路径压缩]

    题目链接 题目大意:就是有n个点m条边,每次第i个点属于第i个联通块,现在有q次询问给你一个数o,如果o这个联通块没有相连的联通块就没什么事情发生,如果有的话,就将这几个点的联通块都并入o所在的联通块 ...

  3. 牛客NC15976--小C的周末(并查集+map计数)

    愉快的周末到了,小C和他的N-1个朋友买了M个游戏,游戏编号从1~M.每个游戏都是多人游戏,他们打算周末一起打游戏. 小C的每个朋友都决定好了要玩哪一款游戏(会有一组人打同一款游戏),并且每人手上都有 ...

  4. 牛客 - 牛半仙的妹子图(并查集+bitset/克鲁斯卡尔重构树+主席树)

    题目链接:点击查看 题目大意:给出一个由 n 个点和 m 条边组成的连通图,每个点都有一种颜色,每条边都有一个权值,现在规定一个起点 st,再给出 q 次询问,每次询问给出区间 [ l , r ] , ...

  5. 牛客 contest897 C-Latale(树上dp)

    题意 N个节点的树,每条边有条权值,问有多少个点对(U,V)(U, V)(U,V),使得UUU到VVV的距离是3的倍数. 思路 dfs1dfs1dfs1处理每个节点包含子树的dis[dis[%3 = ...

  6. 2018/8/9 MultiU 6 并查集+dfs,反向建边提高查询效率 !!! / 最大字段和n维(降维)/ 状压+中途相遇法...

    hdu6370 Werewolf http://acm.hdu.edu.cn/showproblem.php?pid=6370 题意:村民只能说真话,狼人"可以"撒谎,每个人说一句 ...

  7. zoj 3761 Easy billiards 并查集+dfs

    生活真是奇妙的东西,这样的题目居然能被联想到这样的算法,只能说智商不够啊. 这道题目的意思不解释了,月赛的时候我队友已经想出来了做法,但是我们最后还是没A. 题解: 1.首先将所有能连接的球连接起来, ...

  8. [COCI2017-2018#5] Pictionary(并查集+dfs)

    贼ex的一道,卡了本仙女整整7个小时orz 思路容易理解,but码力very重要orz 我愿意花五毛钱提升我的码力,换个脑子也行,不换脸这张脸生得俊俏 luogu传送door 题目 在宇宙一个不为人知 ...

  9. UVA - 208 Firetruck(并查集+dfs)

    题目: 给出一个结点d和一个无向图中所有的边,按字典序输出这个无向图中所有从1到d的路径. 思路: 1.看到紫书上的提示,如果不预先判断结点1是否能直接到达结点d,上来就直接dfs搜索的话会超时,于是 ...

最新文章

  1. 汉诺塔(三)_栈的应用
  2. 宏基因组合种树第290期—油松
  3. eclipse中使用maven创建项目JDK版本默认是1.5解决方法
  4. linux shell 统计行数的8种方法
  5. POJ-2584 T-Shirt Gumbo 最大流
  6. mysql主从同步 sql_mysql主从同步报错;Slave_SQL_Running: No
  7. mac python3.8上怎么安装pygame 第三方库_Python3.8安装Pygame Python3.8安装Pygame教程步骤详解...
  8. django中实现websocket
  9. IDEA如何设置鼠标滚轮调整字体大小
  10. String ,StringBuilder,StringBuffer
  11. 锤子濒危、金立倒闭,华米 OV 们如何艰难求生?
  12. 《Python CookBook2》 第一章 文本 - 测试一个对象是否是类字符串 字符串对齐
  13. TB6612驱动和MG513P3012V电机
  14. 基于HuTool工具实现Excel复杂表头生成、单元格合并绘制对角线(计算N叉树的最大深度和最大宽度)
  15. 彩球滑梯java_玩过这些手机游戏的人都老了 那些曾经风靡一时的手机游戏大盘点(二)...
  16. ajax请求在ie浏览器上的兼容性问题
  17. Exception:There is no getter for property named ‘qo‘ in ‘class cn.xxxxxx.rbac.qo.XxxxQo 的两种错误可能及解决方案
  18. 微信公众号扫码授权登录思路
  19. 曾仕强经典语录-《易经的奥秘》
  20. 键盘按键VK键值列表及宏定义

热门文章

  1. DELPHI串口通讯编程
  2. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol52]48.TPM的目的和使用方法
  3. 计算机科学1pdf,计算机科学导论1.pdf
  4. mips汇编计算开方_读美国伊利诺伊理工大学计算机科学硕士能学到什么?
  5. 四阶混合累积量matlab_12m氢燃料电池城市客车电电混合动力系统设计方案
  6. 怎么检查计算机网络是连接,怎么检测网络打印机是否与电脑连接成功【检测方法】...
  7. python求众数代码_python-LeetCode-求众数
  8. python设计自定义栈类_Python如何自定义模块?Python基础教程,第十讲,自定义模块...
  9. java训练_Java练习
  10. excel条形码字体_在Excel中批量生成条形码,竟如此简单!