【树上差分+LCA】篮球杯 砍树

这篇具有很好参考价值的文章主要介绍了【树上差分+LCA】篮球杯 砍树。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

省赛的题现在来补

感觉什么都不会,已经要没了

题意:

【树上差分+LCA】篮球杯 砍树

思路:

考虑一条边,两端有两棵子树

有这样的性质:

这条边两端的结点的经过次数==M 

因此每加一个点对,都对其路径+1

s[u]==M时,与该点连着的边就是合法边了,统计合法边的最大id就行

Code:文章来源地址https://www.toymoban.com/news/detail-461187.html

#include <bits/stdc++.h>

#define int long long

using namespace std;

const int mxn=3e5+10;
const int mxe=3e5+10;

struct ty{
	int to,next;
}edge[mxe<<2];

struct ty2{
	int u,v,id;
}e[mxe<<2];

int N,M,u,v,tot=0,ans=0;
int head[mxn],F[mxn][33],dep[mxn];
int a[mxn],b[mxn],s[mxn];

void add(int u,int v){
	edge[tot].to=v;
	edge[tot].next=head[u];
	head[u]=tot++;
}
void G_init(){
	tot=0;
	for(int i=0;i<=N;i++){
		head[i]=-1;
	}
}
void dfs1(int u,int fa){
	dep[u]=dep[fa]+1;
	F[u][0]=fa;
	for(int j=1;j<=30;j++) F[u][j]=F[F[u][j-1]][j-1];
	for(int i=head[u];~i;i=edge[i].next){
		if(edge[i].to==fa) continue;
		dfs1(edge[i].to,u);
	}
}
int lca(int u,int v){
	if(dep[u]<dep[v]) swap(u,v);
	for(int j=30;j>=0;j--){
		if(dep[F[u][j]]>=dep[v]){
			u=F[u][j];
		}
	}
	if(u==v) return u;
	for(int j=30;j>=0;j--){
		if(F[u][j]!=F[v][j]){
			u=F[u][j];
			v=F[v][j];
		}
	}
	return F[u][0];
}
void dfs2(int u,int fa,int id){
	for(int i=head[u];~i;i=edge[i].next){
		if(edge[i].to==fa) continue;
		dfs2(edge[i].to,u,i);
		s[u]+=s[edge[i].to];
	}
	if(s[u]==M) ans=max(ans,id/2+1);
}
void solve(){
	cin>>N>>M;
	G_init();
	for(int i=1;i<=N-1;i++){
		cin>>u>>v;
		add(u,v);
		add(v,u);
		e[i]={u,v,i};
	}
	dfs1(1,0);
	for(int i=1;i<=M;i++){
		cin>>a[i]>>b[i];
		s[a[i]]++;
		s[b[i]]++;
		s[lca(a[i],b[i])]-=2;
	}
	dfs2(1,0,1);
	cout<<ans<<'\n';

}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int __=1;//cin>>__;
	while(__--)solve();return 0;
}

到了这里,关于【树上差分+LCA】篮球杯 砍树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 为什么感觉假期有时候比上班还累?

    假期比上班还累的感觉可能由以下几个原因造成: 计划过度:在假期里,人们往往会制定各种计划,如旅游、聚会、休息等,以充分利用这段时间。然而,如果这些计划过于紧张或安排得过于紧密,就会导致身体和心理疲劳,反而比上班还要累。 心理压力:尽管假期是放松

    2024年02月07日
    浏览(39)
  • 现在java和大数据选什么?

    到底是选择 大数据 还是JAVA?”相信这个问题困惑着许多转行待定人士和高校专业待选的学生。 在普通人眼里可能会觉得这两个专业或者行业没啥区别,都是IT里的,能有啥大不同。这是第一层。最近很多小伙伴找我,说想要一些java资料,然后我根据自己从业十年经验,熬夜

    2024年02月08日
    浏览(28)
  • 为什么现在原生家庭的问题这么严重?

    匿名用户 191 人赞同了该回答 换一个玄学的角度来看这个问题,之前看b站,有一个up主说,中国有历史记载的人口数一直都很稳定,7-8千万到1亿左右,明朝2亿,清朝到民国算是增长比较多的,有4亿,但是从开国到现在增长了10亿,从轮回的角度来讲,哪来那么多的人来转世

    2024年02月13日
    浏览(51)
  • 进行压力测试的目的是什么?重要性体现在哪?

    进行压力测试的目的是什么?重要性体现在哪?压力测试是通过施加一定压力或负荷于测试对象,以评估其结构、性能和可靠性的过程。它可以是静态压力测试,即施加一定压力并持续一段时间,也可以是动态压力测试,即施加变化的压力或冲击负荷。压力测试通常通过测量

    2024年02月11日
    浏览(29)
  • 什么是云仓?为什么现在越来越多电商商家合作云仓?

    随着物流行业的发展,相信越来越多的人逐渐了解云仓行业是什么,也许很多人会问:云仓一对一发货是一种什么样的模式?这个问题想必之前在其他文章里看过,所以今天在这里详细说一下一代云仓。 简单来说,云仓一对一配送是一家第三方仓储公司,根据自身优势,为电

    2024年02月11日
    浏览(41)
  • 我为什么现在不玩腾讯的游戏了?

    以前网络也不是很发达,大家基本都是玩的腾讯的游戏,哪里知道什么steam,也不会知道什么主机游戏,但是随着见识的增长,我在17年的时候正式接触到单机游戏,没错,就是17年,当时就觉得wc,这游戏看着就不错,然后回想起来以前玩的腾讯的游戏,瞬间觉得黯然失色。

    2024年02月12日
    浏览(46)
  • 为什么现在的视频都会加入自动字幕功能?

            最近上油管和billbilli等视频网站,会发现部分视频添加了自动字幕生成甚至翻译功能(可能早就有,但是最近我才注意到)。前几天在登录T开头的微博网站,也发现有自建聊天室功能,加入一个聊天室以后又发现聊天室的发言会自动生成实时字幕。因为笔者也参与过

    2023年04月08日
    浏览(44)
  • 为什么无人机现在运用的越来越广泛呢?

    随着科技的飞速发展,无人机已经逐渐从科幻梦想走进现实,成为我们生活中不可或缺的一部分。它们不仅改变了我们的生活方式,还带来了无尽的惊喜与可能性。今天,让我们一起来探讨无人机的魅力与前景吧! 航拍美景: 无人机配备了高清摄像头,可以轻松捕捉到那些

    2024年04月08日
    浏览(80)
  • 为什么现在越来越多的企业选择云计算?

            云计算是用于描述在互联网上发生的一类新的基于网络计算的术语。 这些平台通过提供非常简单的图形界面,隐藏了用户和应用程序的基础架构的复杂性和细节。 云对用户和应用程序是透明的,它们可以以多种方式构建。 一般来说,它们建立在PC服务器集群上,

    2024年02月08日
    浏览(60)
  • 现在都在说 Docker 好,那它有什么弊端吗?

    虽然 Docker 很受欢迎,但也存在一些弊端,包括: 1. 安全问题:如果 Docker 没有正确配置,那么一个容器中的恶意代码可以轻易地影响到主机上的其他容器以及主机本身的安全。 2. 存储问题:当使用大量容器时,存储和管理容器映像可以变得非常困难。这可能需要使用分布式存

    2024年02月15日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包