- [样例输出](#_356)
- [数据范围](#_362)
- [题解](#_366)
- [参考代码](#_396)
+ [写在最后](#_615)
+ [📧 KK这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注后私信一下 KK领取~](#_KK_KK_616)
01.K小姐和她的宠物店连通图
问题描述
K小姐最近开了一家宠物店,她的宠物店里有
n
n
n 个宠物笼,现在她想在这些笼子之间修建一些通道,使得所有的笼子都能互相到达。通道是双向的,且每个笼子最多只能修建一条通道连接另一个笼子。K小姐想知道,如果她要修建
m
m
m 条通道,是否存在一种修建方案,使得修建完成后所有笼子都互相连通。
输入格式
第一行输入一个整数
T
T
T (
1
≤
T
≤
1
0
5
1 \leq T \leq 10^5
1≤T≤105),表示询问数量。
接下来
T
T
T 行,每行输入两个整数
n
n
n 和
m
m
m (
1
≤
n
,
m
≤
1
0
9
1 \leq n, m \leq 10^9
1≤n,m≤109),分别表示笼子的数量和计划修建的通道数量。
输出格式
对于每个询问,如果存在满足要求的修建方案,输出 “YES”,否则输出 “NO”。
样例输入
2
3 3
3 1
样例输出
YES
NO
数据范围
- 1
≤
T
≤
1
0
5
1 \leq T \leq 10^5
1≤T≤105
- 1
≤
n
,
m
≤
1
0
9
1 \leq n, m \leq 10^9
1≤n,m≤109
题解
首先我们考虑什么情况下,
m
m
m 条通道一定能使
n
n
n 个笼子全部连通。因为通道是双向的,所以实际上我们是要构建一棵
n
n
n 个节点的树。众所周知,一棵
n
n
n 个节点的树有
n
−
1
n-1
n−1 条边,所以当
m
≥
n
−
1
m \geq n-1
m≥n−1 时,一定可以使所有笼子连通。
其次我们再考虑什么情况下,
m
m
m 条通道一定不能使所有笼子连通。根据图论的知识,我们知道在
n
n
n 个节点的简单无向图中,最多可以有
n
(
n
−
1
)
2
\frac{n(n-1)}{2}
2n(n−1) 条边。如果
m
n
(
n
−
1
)
2
m > \frac{n(n-1)}{2}
m>2n(n−1),就一定会出现重边或自环,不满足题目要求。所以当
m
n
(
n
−
1
)
2
m > \frac{n(n-1)}{2}
m>2n(n−1) 时,一定不存在合法方案。
综上所述,我们只需要判断
m
m
m 是否满足
n
−
1
≤
m
≤
n
(
n
−
1
)
2
n-1 \leq m \leq \frac{n(n-1)}{2}
n−1≤m≤2n(n−1),如果满足,就输出 “YES”,否则输出 “NO”。
时间复杂度
O
(
T
)
O(T)
O(T),空间复杂度
<