南昌邀请赛 J. Distance on the tree

Tarjan算法详解(AcWing 1174 受欢迎的牛) 题目描述: 每一头牛的愿望就是变成一头最受欢迎的牛。 现在有 N 头牛,编号从 1 到 N,给你 M 对整数 (A,B),表示牛 A 认为牛 B 受欢迎。 这种关系是具有传递性的,如果 A 认为 B 受欢迎,B 认为 C 受欢迎,那么牛 A 也认为牛 C 受欢迎。 你的任务是求出有多少头牛被除自己之外的所有牛认为是受欢迎的。 输入格式 第一行两个数 N,M; 接下来 M 行,每行两个数 A,B,意思是 A 认为 B 是受欢迎的(给出的信息有可能重复,即有可能出现多个 A,B)。 输出格式 输出被除自己之外的 阅读详情

题意:

给出n个节点的一颗树,每条边都有边权,m次查询,每次给出u,v,k,求u到v路径上边权小于等于k的边有多少条

思路:

对边权和k一起离散化,就把每个操作挂到对应的点上,跑一遍tarjan。向下搜索的时候边权w,就用树状数组维护加到第w个位置,回溯的时候删掉就行。假设有一个操作 (u,v,k),那么假设搜索到u的时候,那直接就可以用树状数组求出根节点到u上小于等于k的边有a条(回溯的时候有删边,那么在树状数组中的数一定都是这条路径上的边权),搜索到v的时候就可以直接求出根节点到v的路径上小于等于k的边有b条,然后此时还可以计算出fa=lca(u,v),那么在fa这个点加个操作,等下回溯的时候算出根节点到fa的路径上小于等于x的边有c条,那最后就得到这个操作的答案a+b-2*c。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int>pii;
typedef vector<int>vi;

#define rep(i,a,b) for(int i=(a);i<(b);i++)
#define fi first
#define se second
#define de(x) cout<<#x<<"="<<x<<endl;
#define dd(x) cout<<#x<<"="<<x<<" " ;
#define pb(x) push_back(x)
#define lowbit(a) ((a)&-(a))
#define per(i,a,b) for(int i=(b)-1;i>=(a);--i)
const int N=2e5+5;
int p[N],pre[N],ans[N],sum[N];
bool vis[N];
struct edge{
	int u,v,w;
}ed[N];
struct option{
	int u,v,k;
}opt[N];
struct node{
	int id,w,v;
	node(int tid,int tw,int tv){
		id=tid;
		w=tw;
		v=tv;
	}
};
map<int,int>mp,dis[N];
vector<pii>G[N],lca[N];
vector<node>op[N];
void add(int x,int y){
	for(int i=x;i<N;i+=lowbit(i)){
		sum[i]+=y;
	}
}
int getSum(int x){
	int res=0;
	for(int i=x;i>=1;i-=lowbit(i))
		res+=sum[i];
	return res;
}
int find_set(int x){
	if(pre[x]==x)return x;
	return pre[x]=find_set(pre[x]);
}
void tarjan(int u){
	vis[u]=true;
	for(auto it:G[u]){
		if(!vis[it.fi]){
			add(it.se,1);
			tarjan(it.fi);
			add(it.se,-1);
			pre[it.fi]=u;
		}
	}
	for(auto it:lca[u]){
		ans[it.se]-=2*getSum(it.fi);
	}
	for(auto it:op[u]){
		ans[it.id]+=getSum(it.w);
		if(vis[it.v]){
			int fa=find_set(it.v);
			lca[fa].pb(pii(it.w,it.id));	
		}
	}
}
int main()
{
	memset(vis,0,sizeof(vis));
	int n,m;
	scanf("%d%d",&n,&m);
	rep(i,1,n+1)
		pre[i]=i;	
	int len=n-1;
	rep(i,1,n){
		scanf("%d%d%d",&ed[i].u,&ed[i].v,&ed[i].w);
		p[i]=ed[i].w;
	}
	rep(i,1,m+1){
		scanf("%d%d%d",&opt[i].u,&opt[i].v,&opt[i].k);
		p[++len]=opt[i].k;
	}
	sort(p+1,p+len+1);
	int tot=unique(p+1,p+len+1)-p;
	for(int i=1;i<=len;++i){
		mp[p[i]]=lower_bound(p+1,p+tot+1,p[i])-p;
	}
	rep(i,1,n){
		G[ed[i].u].pb(pii(ed[i].v,mp[ed[i].w])); 
		G[ed[i].v].pb(pii(ed[i].u,mp[ed[i].w]));
	}
	rep(i,1,m+1){
		op[opt[i].u].pb(node(i,mp[opt[i].k],opt[i].v));
		op[opt[i].v].pb(node(i,mp[opt[i].k],opt[i].u));
	}
	tarjan(1);
	rep(i,1,m+1){
		printf("%d\n",ans[i]);
	}
	return 0;
}

Tarjan算法详解 目录一、什么是强连通分量1. 概念2. 强连通分量二、两种dfs遍历1. 方式12. 方式2三、一个简单例子理解算法四、更完整的一个例子五、Code实现 一、什么是强连通分量 tarjan强连通分量算法 1. 概念 连通:无向图中,从任意点i可到达任一点j 强连通:有向图中,从任意点i可到达任一点j 弱连通:把有向图看作无向图时,从任意点i可到达任一点j 如图,强连通无论那个点,都能按照方向到达任意一点,弱连通如果强行按方向,那么B到不了C,A到不了B和C,C到不了B。但如果把他看作是无向图,那么他们也 阅读详情

相关推荐

AutoLisp文件(.lsp)从编写到加载运行:一份给CAD新手的避坑指南

本文为CAD新手提供了一份AutoLisp文件(.lsp)从编写到加载运行的完整指南,涵盖编写环境配置、文件加载流程、调试技巧及工程化实践建议。通过详细的步骤和常见错误解决方案,帮助用户避免常见陷阱,提升AutoLisp脚本的开发效率和应用效果。

weixin_29228203的博客 893

浅谈 Tarjan 算法

无向图中,若删去一条边会使得这个图的极大连通分量数增加,则该边被称为桥。也可以理解为无向图的一个连通块中,若删除一条边会使得至少两点之间无法相互到达,该边被称为桥。无向图中,若删去一个点会使得这个图的极大连通分量数增加,这个点被称为割点。也可以理解为无向图的一个连通块中,若删除一个点会使得至少两点之间无法相互到达,该点被称为割点。注意,强连通分量(SCC,Strongly Connected Components)是在单向图中的。强联通子图,定义为:在单向图中,该子图上的任意两点之间能互相到达。

William_Wang_的博客 5220

Orale EBS R12 AP应付模块 发票导入接口(Interface)

ap_interface_groups_s.nextval; ap_invoices_interface_s.nextval; ap_invoice_lines_interface_s.nextval; SELECT * FROM ap_invoices_interface ih; SELECT * FROM ap_invoice_lines_interface il; SELECT * FROM...

qq_41206741的博客 3316

Tarjan算法超超超详解(ACM/OI)(强连通分量/缩点)(图论)(C++)

深入浅出的Tarjan算法手把手讲解!看完就会!

qaqwqaqwq的博客 1万+

DDR内存接口深度解析:从寻址机制到FPGA时序约束实战

在高速数字系统设计中,内存接口是决定系统性能与稳定性的关键。DDR(双倍数据速率)技术通过在时钟的上升沿和下降沿传输数据,实现了带宽的倍增,广泛应用于消费电子、通信设备和工控主板等领域。其核心原理在于利用三维存储阵列(Bank、Row、Column)的分级寻址机制,通过先进行行激活、再进行列访问的固定时序,实现高速数据吞吐。理解这一寻址顺序是进行精准时序分析的基础。在工程实践中,FPGA作为内存控制器,需通过严谨的时序约束(如set_input_delay)来确保信号在高速传输下的建立与保持时间要求,从而将

weixin_29192211的博客 196

知识图谱中的 Ontology(本体论)

本文的部分图片和内容来自中国科学院自动化研究所刘康老师的课件 Ontology(本体论) Ontology 是(特定领域)信息组织的一种形式,是领域知识规范的抽象和描述,是表达、共享、重用知识的方法。 Ontology 是知识体系构建的关键技术,知识图谱是一种人工智能技术,它的关键在于让计算机能够处理人类的知识。然而,人类脑海中的知识通常是直觉性的,我们无法将这种直觉性的知识直接输入给计算机,On...

P01son的博客 2万+

Tarjan 算法学习笔记

支持度(Support)是指数据集DDD中包含某个项集XXX的记录所占的比例。SuppXfreqX∣D∣SuppX∣D∣freqX​其中freqXfreq(X)freqX表示包含XXX的记录数,∣D∣|D|∣D∣表示数据集DDD中记录的总数。置信度(Confidence)是指数据集DDD中包含项集XXX的记录中同时包含另一个项集YYY的比例。

m0_72410588的博客 1699

Oracle 从入门到精通系列(入门篇)1.1-Oracle 数据库发展史

Oracle 从入门到精通系列(入门篇)1.1-Oracle 数据库发展史

LuciferLiu_DBA 2190

2019 ICPC南昌邀请赛 J Distance on the tree

题目链接 A tree with nnn nodes, which is numbered from 111 to nnn. Edge between each two adjacent vertexes uuu and vvv has a value www, you’re asked to answer the number of edge whose value is no more than kkk during the path between uuu and vvv. Input In the

sky123博客 430

Pytorch图像去噪实战(七):Noise2Noise自监督图像去噪实战,没有干净图也能训练模型

PyTorch图像去噪实战:Noise2Noise自监督去噪方法 本文介绍了在没有干净图像的情况下使用Noise2Noise方法进行图像去噪的实战方案。主要内容包括: 问题场景:真实项目中经常只有带噪图像而没有对应的干净图像,如夜间监控、医学影像等场景。 Noise2Noise核心思想:使用同一场景的两张不同噪声版本的图像进行训练(noisy_image_a → noisy_image_b),让模型学习恢复共同的干净结构而非随机噪声。 技术原理:模型通过最小化两个独立噪声图像之间的差异,最终会收敛到真实干净

ai技术增长的博客 500

嵌入式视频应用开发者必读:嵌入式Linux+FFmpeg硬件编解码实战指南

在嵌入式Linux上,FFmpeg支持多种硬件加速API,比如VAAPI、VDPAU、CUDA,以及针对特定平台的专用接口(如NVIDIA的NVENC、Intel的QSV、ARM的Mali)。FFmpeg的硬件解码通过-hwaccel参数启用,咱们以常见的H.264和HEVC(H.265)格式为例,展示如何用VAAPI和V4L2实现高效解码。: FFmpeg硬件加速需要额外的库,比如libva(VAAPI)、libv4l2(V4L2)或libnvcodec(CUDA)。

大模型大数据攻城狮的专栏 2202

2019南昌邀请赛网络赛 J. Distance on the tree

最基本的离线询问,然后跑数据结构。 此题因为是求边的数量,但是我的树链剖分模板是给点加值和求和求最大值,于是我们在树上每条边中间加一个点,那么这个点的权值就是边的权值。 对边排序,对询问排序,k从小到大处理询问,每次把当前询问小的边加到线段树的点里面,然后求路径上有多少个满足条件的边就是树链剖分后线段树idx[u]到idx[v]的权值和了。 队友状态不好,丢给我这个只写过一道模板题树链剖分的...

binarycopycode 573

IgH EtherCAT 从入门到精通:第 3 章 第一次运行 Hello EtherCAT

摘要:启动EtherCAT主站实践指南 本章详细介绍了如何配置和启动EtherCAT主站系统,主要内容包括: 配置文件详解:讲解/etc/ethercat.conf中的关键配置项,包括主网卡指定、冗余备份设置和网卡驱动选择。 启动流程:说明通过systemd服务和手动命令两种方式加载内核模块,重点介绍了ec_master和ec_generic模块的加载顺序及验证方法。 命令行工具:列举ethercat工具的常用命令,如查看主站状态、扫描从站设备、读取PDO/SDO数据等。 示例程序:简要介绍内核态示例min

从事嵌入式linux android驱动开发,拥有全栈能力 310

2019 icpc南昌邀请赛网络赛 J - Distance on the tree

DSM(Data Structure Master) once learned about tree when he was preparing for NOIP(National Olympiad in Informatics in Provinces) in Senior High School. So when in Data Structure Class in College, he i...

c3po 544

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

2019ICPC南昌邀请赛J题 Distance on the tree(主席树)

Descriptions: \quadDSM(Data Structure Master) once learned about tree when he was preparing for NOIP(National Olympiad in Informatics in Provinces) in Senior High School. So when in Data Structure Cla...

邵光亮的博客 483

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

2019年南昌邀请赛 - 网络赛J:Distance on the tree【树上主席树】

题目: 2019年南昌邀请赛 - 网络赛J:Distance on the tree 题意: 给定一颗带边权的树,Q 次询问,每次查询 u 到 v 的路径上边权 <= W的边的数量 分析: 一眼树链剖分+主席树的模板题,但有个更好的写法: 和求树上两点间距离相似,只要计算出 u 到根的路径上 <= w的边数 + v 到根路径上 <= w 的边数 - 2*LCA(u...

KobeDuu 228

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

2019 ICPC南昌邀请赛比赛 J Distance on the tree(树链剖分上建可持续化线段树)

DSM(Data Structure Master) once learned about tree when he was preparing for NOIP(National Olympiad in Informatics in Provinces) in Senior High School. So when in Data Structure Class in College, he i...

柳予欣的三味书屋~ 1236

【2019南昌邀请赛网络赛 J】Distance on the tree【边权树剖+主席树】

题意: 给定一棵nnn个节点的树,每条边都有一个权值,mmm次查询,每次询问树上两点路径上边权小于kkk的边有多少条?(1≤n,m≤105)(1\leq n,m\leq 10^5)(1≤n,m≤105) 思路: 比较裸的题目,可以离线操作,然后将询问值从小到大进行排序,然后每次单点修改,将比当前询问小的边加入树中。 此处需要注意是边权树剖,因此将每条边的权值压到深度更深的节点上,然后树剖路径查询...

lucius-liu.cn 423

2019南昌邀请赛网络预选赛 J.Distance on the tree(树链剖分)

传送门 题意:   给出一棵树,每条边都有权值;   给出 m 次询问,每次询问有三个参数 u,v,w ,求节点 u 与节点 v 之间权值≤ w 的路径个数; 题解:   昨天再打比赛的时候,中途,凯少和我说,这道题,一眼看去,就是树链剖分,然鹅,太久没写树链剖分的我一时也木有思路;   今天上午把树链剖分温习了一遍,做了个模板题;   下午再想了一下这道题,思路喷涌而出.....

weixin_30340617的博客 112

南昌邀请赛网络赛 J. Distance on the tree (树链剖分+主席树 查询路径边权第k大)

DSM(Data Structure Master) once learned about tree when he was preparing for NOIP(National Olympiad in Informatics in Provinces) in Senior High School. So when in Data Structure Class in College, he i...

1999 292

2019南昌邀请赛网络赛 J题 Distance on the tree 边权树剖 + 树上DFS序建主席树

2019南昌邀请赛网络赛 J题 Distance on the tree 边权树剖 + 树上DFS序建主席树题意思路Code 传送门:https://nanti.jisuanke.com/t/38229 题意 给n个点,n−1条边,每条边都有边权。给n个点,n-1条边,每条边都有边权。给n个点,n−1条边,每条边都有边权。 m此询问,输出u到v这条简单路径上边权<=k的边数。m此询问,输出u到v这条简单路径上边权<=k的边数。m此询问,输出u到v这条简单路径上边权<=k的边数。 思路 首先

狙击美佐的博客 228

2019 南昌邀请赛 Distance on the tree

2019 南昌邀请赛 Distance on the tree 主席树+lca #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <vector> using namespace std; typedef long ...

Chalemagne的博客 244

主席树+树链剖分——南昌邀请赛Distance on the tree

学了差不多一星期的主席树+树链剖分,再来看这题发现其实是个板子题 一开始想复杂了,以为要用类似求树上第k大的树上差分思想来解决这道题,但其实树链上<=k的元素个数其实直接可以用树链剖分来求 具体是把每条树链放到主席树上询问一下求和就好了 #include<bits/stdc++.h> using namespace std; #define maxn 100006 ...

weixin_30613343的博客 135

2019 南昌邀请赛网络赛 Distance on the tree

题目链接 题意 一个有边权的树,提问两点间路径上的边权小于等于某个数的个数 题解 树上主席树模板题,每个节点从他的父亲继承即可 代码 #include<bits/stdc++.h> #define N 100010 #define INF 0x3f3f3f3f #define eps 1e-7 #define pi 3.141592653589793 #define mod 99824...

Spy97的博客 183

南昌邀请赛网络赛 Distance on the tree (主席树+动态倍增LCA)

题目链接:https://nanti.jisuanke.com/t/38229 考研ing,题解比较随意 题目大意 给定一棵树,有边权,每次查询问u,v路径上权值不大于k的个数是多少. 题目分析 主席树,每个点记录是所有祖先节点记录的前缀和,那么对于主席树来讲前后关系就明显了. 再套个动态倍增LCA,就可以做了.详见代码 #include<bits/stdc++...

满月照亮的路 294

计蒜客 2019南昌邀请网络赛J Distance on the tree(主席树)题解

题意:给出一棵树,给出每条边的权值,现在给出m个询问,要你每次输出u~v的最短路径中,边权 <= k 的边有几条 思路:当时网络赛的时候没学过主席树,现在补上。先树上建主席树,然后把边权交给子节点,然后数量就变成了 u + v - lca * 2。专题里那道算点权的应该算原题吧。1A = =,强行做模板题提高自信。 代码: #include<cmath> #inclu...

weixin_34411563的博客 169
上一篇: D. Perfect Groups(思维好题)
下一篇: Fisher判别分析详解
PinappleMi
博客等级 码龄9年 10粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值