当前位置: 首页 > news >正文

缴纳过路费--并查集+优先队列

利用并查集建立联通块,然后>=l的时候统计城市对的个数,>r退出

https://www.luogu.com.cn/problem/P11005

#include<bits/stdc++.h>
using namespace std;
#define N 100011
typedef long long ll;
typedef pair<int,int> PII;
ll n,m,l,r;
ll mod=1000000000+7;
typedef struct edge
{
	int u,v;ll w;
}edge;
struct cmp
{
	bool operator()(const edge &a,const edge &b)const
	{
		return a.w>b.w;
	}
};
priority_queue<edge,vector<edge>,cmp> pq;
int fa[N];
ll an[N];
ll ans;
int find(int x)
{
	if(fa[x]==x) return x;
	else return fa[x]=find(fa[x]);
}
int main()
{ 
cin>>n>>m>>l>>r;
for(int i=1;i<=n;i++) fa[i]=i,an[i]=1;///an就是联通块,初始化为1 
for(int i=0;i<m;i++)
{
	int u,v;ll w;
	cin>>u>>v>>w;
	pq.push({u,v,w});
}
int f=0;
while(pq.size())
{
	edge a=pq.top();
	pq.pop();
	if(a.w>r) break;
	int u=a.u;int v=a.v;
	if(find(u)!=find(v))
	{
		if(a.w>=l)ans+=(an[find(u)]*an[find(v)]);///一定是>=l再统计 
		   										 ///前面的对数与ans无关 
		an[find(v)]+=an[find(u)];///维护联通块 
		fa[find(u)]=find(v);
	}
} 
cout<<ans;
return 0;
}
//5 4 6 7
//1 2 1
//1 3 1
//3 4 1
//5 2 6  ans:4 

http://www.dtcms.com/a/98176.html

相关文章:

  • Qt进阶开发:Graphics View图形视图框架
  • QT 跨平台发布指南
  • 枚举算法-day2
  • python 列表-元组-集合-字典
  • 软件工程之软件开发模型(瀑布、迭代、敏捷、DevOps)
  • 综述速读|086.04.24.Retrieval-Augmented Generation for AI-Generated Content A Survey
  • 深度学习处理时间序列(6)
  • 自学-python-基础-注释、数据类型、运算符、判断、循环
  • 树莓派超全系列文档--(13)如何使用raspi-config工具其二
  • 中断管理常用API详解(三)
  • flatMap 介绍及作用
  • C#连接sqlite数据库实现增删改查
  • 大模型最新面试题系列:微调篇之微调框架(二)
  • AI赋能python数据处理、分析与预测操作流程
  • Vue背景介绍+声明式渲染+数据响应式
  • 基于Baklib的云内容中台落地实践
  • JMeter运行日志详细分析
  • Kafka Stream从入门到精通:构建高吞吐、低延迟的实时流处理应用
  • 力扣.旋转矩阵Ⅱ
  • sqli-labs靶场 less6
  • Android 串口配置
  • 双磁条线跟踪控制
  • LJF-Framework 第12章 LjfFilter拦截器设计
  • hbuilderx打包iOS上传苹果商店的最简流程
  • AI坦克智能决策:MOE模型的动态专家协作与加权融合
  • Python自动化模块:开启高效编程新时代
  • 乘AI之势,劲吹正能量之风:生成式人工智能(GAI)认证引领新时代
  • AudioFlinger与AudioPoliceManager初始化流程
  • unity客户端面试高频2(自用)
  • Redis底层数据结构实现