「ABC238E」 Range Sums

前言

一道水得不能再水的题,虽说在图论的题单里,但没用图,用了并查集就轻松 A C AC AC

大意

输入 q q q l , r l,r l,r,表示知道 l l l r r r的区间,最后问能不能知道 0 0 0 n n n,能就输出Yes,不能就输出No

思路

  1. 图做法:可以把知道 l l l r r r的区间抽象为从 l − 1 l-1 l1 r r r连一条边,把从 x x x y y y有一条边理解为知道 x + 1 x+1 x+1 y y y的区间,最后从 0 0 0开始,遍历整个图,看看能否到 n n n就可以了。

  2. 并查集做法:可以把知道 l l l r r r的区间抽象为 l − 1 l-1 l1 r r r的祖先,最后看看 0 0 0 n n n是否拥有公共祖先就可以了。

Code

图:

不放了,网上到处都是~~(其实是我懒得写)~~。

并查集:

#include<bits/stdc++.h>
int n,q,l,r,pre[2000005];
inline int find(int x){return pre[x]==x?x:pre[x]=find(pre[x]);}//查询
int main(){
	scanf("%d%d",&n,&q);
	for (int i=1;i<=n;++i)pre[i]=i;//初始化
	while (q--){
		scanf("%d%d",&l,&r);
		pre[find(l-1)]=find(r);//合并
	}
	if (find(0)==find(n))puts("Yes");
	else puts("No");
}
  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值