hdu4912 LCA(ST)+???+贪心

手把手教你用STM32CubeMX和HAL库驱动MT6835磁编码器(SPI读取21位角度) 本文详细介绍了如何使用STM32CubeMX和HAL库驱动MT6835磁编码器,通过SPI接口读取21位高精度角度数据。从硬件准备、CubeMX配置到HAL库驱动实现与优化,提供了完整的实战指南,帮助开发者快速掌握磁编码器的应用技巧,适用于机器人关节和精密仪器等高精度场景。 阅读详情

2014 Multi-University Training Contest 5 B - Paths on the tree

题意:

一个n个点的无向树

给你m个路径u,v:路径就是从u走到v的最短路经过的所有点

现在要选尽量多的路径,使得路径不会有交点

思路:

贪心:lca深度大的先选

每次选要判是否能走(路径上的点是否被标记过)

选了之后将整条路径向上暴力vis标记,这样T了

因为可能有极限数据:前1条路径是uv深度小,lca深度小

后R条路径是uv深度大但lca深度很低很低的多条路径,

这样最坏每条要O(n)判是否能走

正解是

贪心还是贪心

但是选了之后将lca以下的子树全部标记,由于排序过,不会漏解

这样的话,选之前判u v lca是否被标记就好了

g++ 694ms

难度0.85

#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#include<queue>
using namespace std;
#define ll long long
const int maxn=100005;
int head[maxn];
int to[maxn*2];
int nxt[maxn*2];
queue<int>qq;

int cnt=0;

int dep[2*maxn];//序的深度 
int vs[2*maxn];//序对应的点下标 
int id[maxn];//点对应的首次出现序下标 
bool vis[2*maxn];
int fa[maxn];

int dp[2*maxn][20];//ST 第i个序下标 数2^j个的最小的dep 的序下标  

int idx=0;//时间戳 

inline ll read()
{
	ll x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
void add(int u,int v)
{
	cnt++;
	nxt[cnt]=head[u];
	head[u]=cnt;
	to[cnt]=v;
}
void dfs(int u,int p,int d)
{
	fa[u]=p;
	vis[u]=1;
	id[u]=++idx;
	vs[idx]=u;
	dep[idx]=d;
	for(int i=head[u];i!=-1;i=nxt[i])
	{
		int v=to[i];
		if(!vis[v])
		{
			dfs(v,u,d+1);
			vs[++idx]=u;
			dep[idx]=d;
		}
	}
}

void ST(int n)//这里的n是序上限,大概2*点-1 
{
	for(int i=0;i<=n;i++)
		dp[i][0]=i;
	for(int j=1;(1<<j)<=n;j++)
	{
		for(int i=1;i+(1<<j)-1<=n;i++)//dpij->min[i,i+2^j-1]
		{
			int x=dp[i][j-1];int y=dp[i+(1<<(j-1))][j-1];
			if(dep[x]<dep[y])dp[i][j]=x;
			else dp[i][j]=y;
		}
	}
}
int RMQ(int l,int r)
{
	int k=(int)(log10((double)(r-l+1))/log10(2.0));
	int x=dp[l][k];int y=dp[r-(1<<k)+1][k];
	if(dep[x]<dep[y])return x;
	else return y;
} 
int LCA(int x,int y)//返回点下标 
{
	int l=id[x];int r=id[y];
	if(l>r)swap(l,r);
	int pos=RMQ(l,r);
	return vs[pos];	
}
struct path
{
	int u,v,lca;
	path() {};
	path(int u,int v,int lca):u(u),v(v),lca(lca) {};
	bool operator <(const path&a)const
	{
		return dep[id[a.lca]]<dep[id[lca]];
	}
} q[2*maxn];


bool check(int u,int v,int lca)
{
	if(vis[lca])return false;
	if(vis[u])return false;
	if(vis[v])return false;
	return true;
}
void update(int u,int v,int lca)//TLE
{
	while(u!=lca)
	{
		vis[u]=1;
		u=fa[u];
	}
	while(v!=lca)
	{
		vis[v]=1;
		v=fa[v];
	}
	vis[lca]=1;
//	printf("%d %d %d\n",vis[1],vis[2],vis[3]);
}
void bfs(int root) {  
    vis[root] = 1;  
    while (!qq.empty())  qq.pop();  
    qq.push(root);  
    while (!qq.empty()) {  
        int u = qq.front();  
        qq.pop();  
        for (int i = head[u]; i!=-1; i =nxt[i]) {  
            int v = to[i];  
            if (v == fa[u] || vis[v])  continue;  
            vis[v] = 1;  
            qq.push(v);  
        }  
    }  
}  
int main()
{
	int n,m;int u,v;
	while(~scanf("%d %d",&n,&m))
	{
		memset(head,-1,sizeof(head));
		idx=0;
		cnt=0;vis[n]=0;
		for(int i=1;i<=n-1;i++)
		{
			scanf("%d %d",&u,&v);
			vis[i]=0;
		//	u=read();	//	v=read();
			add(u,v);	add(v,u);
		}
		dfs(1,100001,1);
		ST(2*n);
		for(int i=1;i<=m;i++)
		{
			scanf("%d %d",&u,&v);
		//	u=read();	//	v=read();
			q[i]=path(u,v,LCA(u,v));
		}
		memset(vis,0,sizeof(vis));
		sort(q+1,q+1+m);int ans=0;
		
	//	for(int i=1;i<=m;i++)
	//		printf("%d %d %d\n",q[i].u,q[i].v,q[i].lca);
		
		for(int i=1; i<=m; i++)
			if(check(q[i].u,q[i].v,q[i].lca)==true)
				ans++,bfs(q[i].lca);
				//update(q[i].u,q[i].v,q[i].lca);
		printf("%d\n",ans);
	}

} 



杰理JL701N内置flash录音配置教程 本文详细介绍了内置Flash录音功能的配置方法。主要内容包括:1) 基础模式配置(开启音乐/录音模式、Flash录音宏定义);2) 录音参数设置(格式基准值、存储区域定义、容量配置);3) MP3编码特殊处理;4) 下载时的Flash格式化操作;5) 录音开关和播放接口的使用说明。配置过程涉及多个关键文件的修改,并强调存储容量的精确分配。 阅读详情

相关推荐

SOC Boot学习(二)——JTAG Debug介绍

JTAG(Joint Test Action Group ,联合测试行动小组 ) 是一种国际标准测试协议,主要用于芯片内部测试及对系统进行仿真、调试。JTAG 技术是一种嵌入式调试技术,它在芯片内部封装了专门的测试电路 TAP ( Test Access Port ,测试访问口),通过专用的 JTAG 测试工具对内部节点进行测试。如今大多数比较复杂的器件都支持 JTAG 协议,如 ARM 、 DSP 、 FPGA 器件等。

yttt的博客 1605

HDU 4912 lca贪心

Paths on the tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 297    Accepted Submission(s): 93 Problem Description bobo has a tr

_rabbit的专栏 1347

Brim与ZUI协同安装指南:从下载到流量分析实战

本文提供Brim与ZUI协同安装与实战指南,详细讲解从下载、环境变量配置到流量分析的全流程。通过将PCAP文件转换为ZNG格式,结合直观的Zed查询语言,这套组合能极大提升大型网络数据包的分析效率,是网络安全与运维人员进行高效流量分析的利器。

metal的博客 458

HDU 4912 (贪心)

题目链接:点击这里题意:在一棵树上给出m个链<u,v><u,v>, 求出最多能够选择多少个链使得所有的链都没有交点。根据lca自底向上贪心即可。#include <cstring> #include <iostream> #include <cstdio> #include <cmath> #include <algorithm>using namespace std; #define maxn 1

morejarphone~ 520

树莓派与无人机协同实战:基于OpenCV的地标识别优化策略

本文深入探讨了基于树莓派与无人机的协同系统,重点分享了利用OpenCV优化地标识别以实现精准降落的实战策略。内容涵盖从应对复杂光照的图像预处理、鲁棒的轮廓几何过滤,到通过ROS进行稳定通信,以及实现分层控制与状态机设计,旨在提升系统在真实环境中的可靠性与性能。

y2z3a4b5c的博客 1086

LabVIEW 调用MATLAB 进行图像处理的实现

程机械及设备的变形、振动、冲击、粗糙度、刚度和强度等特性,还可用在土木结构、水利设施的变形测量[4][5]。因此,该技术在机械、土木、水利、电器、航空航天、兵器工业及生物医学等领域的检测中具有非常重要的地位。将物面前方空间的散斑用摄像设备记录下来,当物体运动或由于受力而变形时,这些随机分布的散斑图也随之在空间按一定的规律运动,因此能用记录的散斑图在计算机上分析物体的运动和变形,这就是电子散斑技术。当物体的漫反射表面被激光照射时,漫反射的光波在物体表面的前方相互干涉,由于漫反射光的。

qq_37971227的博客 3873

HDU 4912 Paths on the tree

http://acm.hdu.edu.cn/showproblem.php?pid=4912 题意:给一棵树,再给一些路径,求最多有多少条路径不相交。 题解:主要是贪心的想法。用LCA处理出路径的层数,然后从最深处的节点往上找。因为节点越深,对其他路径影响度越小,相交的可能性越低。需要手动扩栈。 1 #pragma comment(linker, "/STACK:10240...

aichangjie8078的博客 233

RV1126笔记二十七:MetaRTC6移植

MetaRTC6移植

6038

HDU - 4912 LCA + 贪心

题意:题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4912 一棵树上有m条链,要求取得最多的链,保证链与链之间的节点没有重复。思路:又get到新套路 对于树上任意两点之间的路径,一定会经过他们之间的LCA。 贪心的思路,很关键的一点要意识到,对于两条链,如果存在重复,应该选择LCA深度较大的,也就是里根越远的。因为深度越小灵活度越小

Bahuia的博客 745

机器学习笔记:估算模型训练所需的样本量的方法

相反,如果训练得分高而交叉验证得分低,那么模型可能存在过拟合问题,需要更多的样本来提高泛化能力。本文将介绍一些常用的方法来估算模型训练所需的样本量,并提供相应的源代码。除了经验法则和学习曲线法,还有一些统计学方法可以用于估算模型训练所需的样本量。学习曲线是一种通过绘制模型性能与样本量之间的关系曲线来估算样本量的方法。需要注意的是,这些方法仅提供了估算样本量的指导,具体的样本量仍然需要根据实际情况进行调整和优化。通过合理估算样本量,可以提高机器学习模型的性能和泛化能力,从而更好地应用于实际问题中。

HnrzLinux的博客 2732

【小白CV教程】YOLOv5+Deepsort实现车辆行人的检测、追踪和计数

【小白CV教程】YOLOv5+Deepsort实现车辆行人的检测、追踪和计数本文禁止转载!项目简介:YOLOv5检测器:DeepSort追踪器:运行demo:训练自己的模型:调用接口:创建检测器:调用检测接口: 本文禁止转载! 项目简介: 使用YOLOv5+Deepsort实现车辆行人追踪和计数,代码封装成一个Detector类,更容易嵌入到自己的项目中。 代码地址(欢迎star): https://github.com/Sharpiless/Yolov5-deepsort-inference 最终效果:

梁瑛平的博客 5万+

hdu 4912

居然贪心。 先求LCA,

Cugb->Baoge 713

【100%通过率】2024华为OD机试真题E卷 C++ 实现【栈数据合并/空栈压数】

向一个空栈压入正整数,每当压入一个整数时,执行以下规则(设: 栈顶至栈底整数依次编号为n1、n2...nx, n1为最新压入的整数)

MISAYAONE的博客 1553

HDU4912 Paths on the tree(数据结构,lca,贪心)

Paths on the tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 1594    Accepted Submission(s): 552 Problem Description bobo ha

say_c_box的博客 388

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Codeforces Global Round 23 D. Paths on the Tree(树型dp)

Codeforces Global Round 23 D. Paths on the Tree 树型dp

qq_45377553的博客 579

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

D. Paths on the Tree(树形dp)

一共 k 条路径,那么根节点 1 就被经过了 k 次,为了让总价值最大,并且满足兄弟节点被经过次数之差不超过 1,假设根节点有 cnt 个儿子,那么每个儿子初始要被经过 k/cnt 次,还有 k%cnt 个儿子多经过一次。如果一个儿子多经过一次之后,相比于原来得到的增量最大,那么这个儿子要被多经过一次。,这里只是额外多经过一次,也就是取模之后剩余的多了一个。根节点经过 k 次,那么所有节点至少被经过的次数就被确定了,假设为。次之后,以该节点为根的子树得到的最大价值。个儿子,因为儿子至少经过的次数是。

Mr_dimple的博客 764

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

HDU_4912_Paths on the tree LCA(最近公共祖先)+贪心

http://acm.hdu.edu.cn/showproblem.php?pid=4912

可视化和机器学习 1579

HDU 4912 Paths on the tree (树链剖分+线段树+DP)

#include<bits/stdc++.h> using namespace std; #define debug puts("YES"); #define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++) #define ll long long #define lrt int l,int r,int rt #define lson l,m...

满月照亮的路 307

【HDU4912】Paths on the tree

题面 bobo有一棵树,其顶点方便地用1,2...n标记。 树上有m条路径。 BOBO想挑一些路径,同时任何两个路径不共享共同的顶点。 找到bobo可以选择的最大路径数。 输入包括几个测试。 对于每个测试: 第一行包含n,m(1≤n,m≤105)。 以下(n-1)行中的每一行包含2个整数a i,b i表示顶点a i和b i之间的边(1≤ai,bi≤n)。 之后m行中的每一行包...

Ashley_2013的博客 275

HDU - 4912

题目链接:HDU - 4912 显然确定一个根,不会影响答案。 然后,对于一条路径的最高点,就是端点的LCA。 我们每次尽量贪心选择LCA深度大的点,对上面的影响就尽量的小。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#define int long lon...

青烟绕指柔的博客 517

HDU-4912-Paths on the tree

贪心+LCA离线算法 代码:

z309241990的专栏 972

【HDU】4912 Paths on the tree 离线LCA+贪心

传送门:【HDU】4912 Paths on the tree【HDU】4912 Paths on the tree

poursoul 1175

Paths on the Tree【ZOJ - 3863】【点分治+推理过程】

题目链接 大致题意:有一棵N个点的树,现在取两条边,使得两条边共同都有的点的数量小于等于K,问这样的取法的种类数。 第一条边:{1, 2, 3},第二条边:{2, 3, 4} 第一条边:{2, 3, 4},第二条边:{1, 2, 3} 算两种方案数,同时一个点也被算作是一条边 但是{1, 2, 3}和{3, 2, 1}是一样的边(边没有方向性,无向) 解这道题,让我们先去想想看高复杂度...

既然弱小,就只顾变强就是了 509

HDU 4912(Paths on the tree-树上取链,贪心)

Paths on the tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 1161    Accepted Submission(s): 384 Problem Description bobo has a

nike0good |Oier&ACMer | 熟能生巧 1014

HDU 4912

给一棵n个结点的树,m条路径的起点和终点, 问至多可以选择多少条路径使其两两间没有公共点。

Skywalker 748

HDU 4912 LCA+策略

点击打开链接 题意:给了一个树,然后m条路径,问最多可以选多少条路径而没有一个点是重复使用的,如第二组样例,3条路径是4—2—5和6—3—7和2—1—3,那么只能选前两个使得所选路径最多 思路:没啥思路,看了正解竟然是LCA+贪心,好嘛可以这样考虑,对于所有的可选路径,我们先选择最下面的对上面是没有影响的,那么我们可以对每条路经的最上面的那个点进行排序,就按深度由大到小排序,然后这个最上面的点

Dan__ge的博客 2229
上一篇: hdu4027 线段树啦啦啦
下一篇: ACM-ICPC 2017 Asia Urumqi K.
animalcoder
博客等级 码龄9年 43粉丝 150原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值