【牛客 - 157B】凤凰(树上并查集,dfs)
题干:
链接: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)相关推荐
- 牛客题目 - 白色相簿(并查集)
牛牛的Fib序列 Problem Description 链接:https://ac.nowcoder.com/acm/problem/20793 来源:牛客网 众所周知,一个人或两个人之间的关系是最 ...
- 2020牛客多校G[并查集的两种思想,按秩合并+路径压缩]
题目链接 题目大意:就是有n个点m条边,每次第i个点属于第i个联通块,现在有q次询问给你一个数o,如果o这个联通块没有相连的联通块就没什么事情发生,如果有的话,就将这几个点的联通块都并入o所在的联通块 ...
- 牛客NC15976--小C的周末(并查集+map计数)
愉快的周末到了,小C和他的N-1个朋友买了M个游戏,游戏编号从1~M.每个游戏都是多人游戏,他们打算周末一起打游戏. 小C的每个朋友都决定好了要玩哪一款游戏(会有一组人打同一款游戏),并且每人手上都有 ...
- 牛客 - 牛半仙的妹子图(并查集+bitset/克鲁斯卡尔重构树+主席树)
题目链接:点击查看 题目大意:给出一个由 n 个点和 m 条边组成的连通图,每个点都有一种颜色,每条边都有一个权值,现在规定一个起点 st,再给出 q 次询问,每次询问给出区间 [ l , r ] , ...
- 牛客 contest897 C-Latale(树上dp)
题意 N个节点的树,每条边有条权值,问有多少个点对(U,V)(U, V)(U,V),使得UUU到VVV的距离是3的倍数. 思路 dfs1dfs1dfs1处理每个节点包含子树的dis[dis[%3 = ...
- 2018/8/9 MultiU 6 并查集+dfs,反向建边提高查询效率 !!! / 最大字段和n维(降维)/ 状压+中途相遇法...
hdu6370 Werewolf http://acm.hdu.edu.cn/showproblem.php?pid=6370 题意:村民只能说真话,狼人"可以"撒谎,每个人说一句 ...
- zoj 3761 Easy billiards 并查集+dfs
生活真是奇妙的东西,这样的题目居然能被联想到这样的算法,只能说智商不够啊. 这道题目的意思不解释了,月赛的时候我队友已经想出来了做法,但是我们最后还是没A. 题解: 1.首先将所有能连接的球连接起来, ...
- [COCI2017-2018#5] Pictionary(并查集+dfs)
贼ex的一道,卡了本仙女整整7个小时orz 思路容易理解,but码力very重要orz 我愿意花五毛钱提升我的码力,换个脑子也行,不换脸这张脸生得俊俏 luogu传送door 题目 在宇宙一个不为人知 ...
- UVA - 208 Firetruck(并查集+dfs)
题目: 给出一个结点d和一个无向图中所有的边,按字典序输出这个无向图中所有从1到d的路径. 思路: 1.看到紫书上的提示,如果不预先判断结点1是否能直接到达结点d,上来就直接dfs搜索的话会超时,于是 ...
最新文章
- 汉诺塔(三)_栈的应用
- 宏基因组合种树第290期—油松
- eclipse中使用maven创建项目JDK版本默认是1.5解决方法
- linux shell 统计行数的8种方法
- POJ-2584 T-Shirt Gumbo 最大流
- mysql主从同步 sql_mysql主从同步报错;Slave_SQL_Running: No
- mac python3.8上怎么安装pygame 第三方库_Python3.8安装Pygame Python3.8安装Pygame教程步骤详解...
- django中实现websocket
- IDEA如何设置鼠标滚轮调整字体大小
- String ,StringBuilder,StringBuffer
- 锤子濒危、金立倒闭,华米 OV 们如何艰难求生?
- 《Python CookBook2》 第一章 文本 - 测试一个对象是否是类字符串 字符串对齐
- TB6612驱动和MG513P3012V电机
- 基于HuTool工具实现Excel复杂表头生成、单元格合并绘制对角线(计算N叉树的最大深度和最大宽度)
- 彩球滑梯java_玩过这些手机游戏的人都老了 那些曾经风靡一时的手机游戏大盘点(二)...
- ajax请求在ie浏览器上的兼容性问题
- Exception:There is no getter for property named ‘qo‘ in ‘class cn.xxxxxx.rbac.qo.XxxxQo 的两种错误可能及解决方案
- 微信公众号扫码授权登录思路
- 曾仕强经典语录-《易经的奥秘》
- 键盘按键VK键值列表及宏定义
热门文章
- DELPHI串口通讯编程
- [密码学基础][每个信息安全博士生应该知道的52件事][Bristol52]48.TPM的目的和使用方法
- 计算机科学1pdf,计算机科学导论1.pdf
- mips汇编计算开方_读美国伊利诺伊理工大学计算机科学硕士能学到什么?
- 四阶混合累积量matlab_12m氢燃料电池城市客车电电混合动力系统设计方案
- 怎么检查计算机网络是连接,怎么检测网络打印机是否与电脑连接成功【检测方法】...
- python求众数代码_python-LeetCode-求众数
- python设计自定义栈类_Python如何自定义模块?Python基础教程,第十讲,自定义模块...
- java训练_Java练习
- excel条形码字体_在Excel中批量生成条形码,竟如此简单!