ybtoj 躲避拥挤 并查集

这篇博客探讨了一个看似图论但实际上可以使用并查集解决的问题。通过分析样例和数据范围,博主揭示了解题思路,即通过并查集处理连通性,避免在大量询问时重复计算。在讲解过程中,博主还提到了离线处理询问以优化效率的方法,并给出了相关代码实现。
摘要由CSDN通过智能技术生成

题目

在这里插入图片描述

样例

在这里插入图片描述

数据范围

在这里插入图片描述

解题

乍一看是图,但是并查集。其实画个图就知道了


用微软白板画的,鼠标作画。
可以看到3和5之间是5705的人气值,当询问6000时,就会有
(5,3)和(3,5)这两个组合满足题目条件,像这种求连通的题呢,就可以用并查集了,不难发现,3和5一开始属于两个并查集,但满足条件之后贡献出了两个答案,那么3和5这个并查集与2这个并查集合并之后的贡献是多少呢?
是2乘1再考虑反方向走再乘2对吧,所以现在就有了6个答案(2+4)。
但是这题如果每次询问都去重做一遍,可能会爆掉,所以考虑离线做法,具体看代码

代码

#include<bits/stdc++.h>
using namespace std;
int fa [400086];//fa[i]是i的大哥
int cnt[400086];//cnt[i]是i的帮派规模
int result=0;//单次结果
int ans[400086];
struct EDGE
{
   
	int u;
	int v;
	int w;
}edge[100086];//从u走到v的人气值w
struct QUESTION
{
   
	int w;
	int num;
}que[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值