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

news/2024/11/25 20:34:40/

省赛的题现在来补

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

题意:

思路:

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

有这样的性质:

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

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

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

Code:

#include <bits/stdc++.h>#define int long longusing 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;
}


http://www.ppmy.cn/news/94631.html

相关文章

一文会用断码屏

断码屏的使用 1、断码屏显示文字原理 我理解应该是偏压原理达到显示效果的。 LCD驱动分为A型、B型&#xff0c;如果LCD偏压类型为C型&#xff0c;固定为 1/3 偏压。 由数据手册得知&#xff0c;以下&#xff1a; LCD 驱动器提供的 COM 和 SEG 输出数目&#xff0c;以及偏压…

【C++】命名空间

1. 由来 命名空间时怎么来的&#xff1f;它又是什么&#xff0c;让我们一起来看一下吧 首先了解&#xff1a;在同一个域中不能同时出现重名的变量或函数名等&#xff08;不同域中可以尽管是全局与局部域&#xff09; ok 我们来看 在工程项目里&#xff0c;一开始用 C语言 开…

linux系统安装rabbimtMq

如果需要面板访问开放端口 1、安装 Erlang 环境 因为 rabbitmq 是使用 Erlang 语言开发的&#xff0c;所以说 rabbitmq 是在 Erlang 环境上运行的。 yum -y install erlang 2、安装 rabbitmq 及依赖 yum -y install socat logrotate initscripts rabbitmq-server 现在已经可…

Unix/C/C++进阶--pthread 跨平台

pthread 跨平台 1 pthread 介绍1.1 简介1.2 数据类型1.3 函数1.4 Windows下&#xff0c;pthread库支持的一些主要函数 2 库文件2.1 libwinpthread-1.dll&#xff08;mingw&#xff09;2.2 pthreadVC2.dll&#xff08;微软&#xff1f;&#xff09; 3 调用 libwinpthread-1.dll参…

电子器件系列37:SD卡座(Push-Push和Push-Pull)

SD卡座是目前最通用的数据存储卡座、记忆卡座。在各种通讯数码产品、安防产品、带储存类产品等设备上都有所应用。有着性价比高、存储容量大、使用便捷、通用性以及安全性强等特点。自弹式SD卡座的卡槽底部会设有一个小直径、小线径的弹簧或一种切口式弹片。当装入SD卡时&#…

2023年真无线蓝牙耳机品牌有哪些推荐?无线蓝牙耳机选购指南

今天就来给大家测评一下2023年最受用户欢迎的蓝牙耳机&#xff0c;在不断地测试耳机&#xff0c;并挖掘好的耳机出来&#xff0c;不得不说&#xff0c;蓝牙和麦克风以及音频技术的驱动的迭代更新&#xff0c;性能确实惊叹不已。 对于刚接触无线耳机的小白来说&#xff0c;选购…

【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache抽象详解的核心原理探索

带你深入分析Spring所提供的缓存Cache抽象详解的核心原理探索 缓存的理解缓存使用的案例 缓存命中率基本概念Spring Cache API及默认提供的实现Spring提供的核心Cache接口Java代码Java代码默认提供的实现&#xff1a;Java代码 Spring缓存的问题Spring缓存模糊匹配Evict的问题Sp…

图像处理 边缘检测 绘制金字塔 模板匹配

第四周学习笔记 1.Canny边缘检测 Canny边缘检测器是一种多步算法&#xff0c;用于检测任何输入图像的边缘。 边缘检测步骤&#xff1a; 1.应用高斯滤波器&#xff0c;以平滑图像&#xff0c;滤除噪声&#xff08;降噪&#xff09; 2.计算图像中每个像素点的梯度大小&#…