【蚂蚁笔试题汇总】[全网首发] 2024-03-30-蚂蚁春招笔试题-三语言题解(CPP Python Java)(1)

	- [样例输出](#_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),空间复杂度

O

(<

  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值