CODEVS 2370 小机房的树

[LCA][CODEVS 2370]小机房的树 #include #include #include #include using namespace std; void read(int& n) { char c = getchar(); int tot = 0; while(c'9')c=getchar(); while(c>='0'&&c<='9') { tot = tot *10+c-'0'; c=getchar(); 阅读详情

任意门:http://codevs.cn/problem/2370/

题目描述  Description

小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上。有一天,他们想爬到一个节点上去搞基,但是作为两只虫子,他们不想花费太多精力。已知从某个节点爬到其父亲节点要花费 c 的能量(从父亲节点爬到此节点也相同),他们想找出一条花费精力最短的路,以使得搞基的时候精力旺盛,他们找到你要你设计一个程序来找到这条路,要求你告诉他们最少需要花费多少精力

输入描述  Input Description
第一行一个n,接下来n-1行每一行有三个整数u,v, c 。表示节点 u 爬到节点 v 需要花费 c 的精力。
第n+1行有一个整数m表示有m次询问。接下来m行每一行有两个整数 u ,v 表示两只虫子所在的节点
输出描述  Output Description

一共有m行,每一行一个整数,表示对于该次询问所得出的最短距离。

样例输入  Sample Input

3

1 0 1

2 0 1

3

1 0

2 0

1 2

样例输出  Sample Output

1

1

2

 

数据范围及提示  Data Size & Hint

1<=n<=50000, 1<=m<=75000, 0<=c<=1000

 

题意概括:

需要注意一点是给的边的信息是先给子节点再给父亲结点。

解题思路:

DFS预处理各个结点到树的根结点的距离(如果建双向边要判重)

Tarjan 找出最近公共祖先,老套路(如果建双向边要判重)

TIP:

这些题目要注意找根结点(建单向边的时候),如果搞不清楚谁是子节点谁是父亲结点,建双向边,操作时判重一下即可。

 

AC code:

  1 #include <cstdio>
  2 #include <iostream>
  3 #include <cstring>
  4 #include <algorithm>
  5 #include <vector>
  6 #define INF 0x3f3f3f3f
  7 #define LL long long
  8 using namespace std;
  9 const int MAX_N = 5e4+5;
 10 const int MAX_M = 8e4;
 11 struct Edge{int v, w, nxt;}edge[MAX_N<<1];
 12 struct Query
 13 {
 14     int v, id;
 15     Query(){};
 16     Query(int _v,int _id):v(_v),id(_id){};
 17 };
 18 vector<Query> q[MAX_N];
 19 
 20 int head[MAX_N], cnt;
 21 int dis[MAX_N];
 22 int fa[MAX_N];
 23 bool vis[MAX_N];
 24 bool in[MAX_N];
 25 int ans[MAX_M];
 26 int N, M;
 27 
 28 void init()
 29 {
 30     memset(head, -1, sizeof(head));
 31     memset(dis, 0, sizeof(dis));
 32     memset(vis, false, sizeof(vis));
 33     memset(in, false, sizeof(in));
 34     memset(ans, 0, sizeof(ans));
 35     cnt = 0;
 36 }
 37 
 38 void AddEdge(int from, int to, int weight)
 39 {
 40     edge[cnt].v = to;
 41     edge[cnt].w = weight;
 42     edge[cnt].nxt = head[from];
 43     head[from] = cnt++;
 44 }
 45 
 46 int getfa(int x){return fa[x]==x?x:fa[x] = getfa(fa[x]);}
 47 /*
 48 int getfa(int x)                                        //找祖先
 49 {
 50     int root = x;
 51     while(fa[root] != root) root = fa[root];
 52 
 53     int tmp;
 54     while(fa[x] != root){
 55         tmp = fa[x];
 56         fa[x] = root;
 57         x = tmp;
 58     }
 59     return root;
 60 }
 61 */
 62 void dfs(int s, int f)
 63 {
 64     for(int i = head[s]; i != -1; i = edge[i].nxt){
 65         //if(edge[i].v == f) continue;              //如果建双向边要去重
 66         dis[edge[i].v] = dis[s] + edge[i].w;
 67         dfs(edge[i].v, s);
 68     }
 69 }
 70 
 71 void Tarjan(int s, int f)
 72 {
 73     int root = s;
 74     fa[s] = s;
 75     for(int i = head[s]; i != -1; i = edge[i].nxt){
 76         int Eiv = edge[i].v;
 77         //if(Eiv == f) continue;        //如果建双向边要去重
 78         Tarjan(Eiv, root);
 79         fa[getfa(Eiv)] = s;
 80     }
 81     vis[s] = true;
 82     for(int i = 0; i < q[s].size(); i++){
 83         if(vis[q[s][i].v] && !ans[q[s][i].id]){
 84             ans[q[s][i].id] = dis[q[s][i].v] + dis[s] - 2*dis[getfa(q[s][i].v)];
 85         }
 86     }
 87 }
 88 
 89 int main()
 90 {
 91     init();
 92     scanf("%d", &N);
 93     for(int i = 1, u, v, w; i < N; i++){
 94         //scanf("%d %d %d", &u, &v, &w);    //建双向边
 95         scanf("%d %d %d", &v, &u, &w);
 96         AddEdge(u, v, w);
 97         //AddEdge(v, u, w);         //建双向边
 98         in[v] = true;
 99     }
100     scanf("%d", &M);
101     for(int i = 1, u, v; i <= M; i++){
102         scanf("%d %d", &u, &v);
103         q[u].push_back(Query(v, i));
104         q[v].push_back(Query(u, i));
105     }
106 
107     int root = 0;
108     for(int i = 0; i < N; i++) if(!in[i]){root = i; break;}
109 
110     dfs(root, -1);
111     Tarjan(root, -1);
112 
113     for(int i = 1; i <= M; i++){
114         printf("%d\n", ans[i]);
115     }
116     return 0;
117 }

 

零基础学simulink仿真建模--基于Simulink进行农业机械用开关磁阻电机的仿真建模 特点结构简单:无电刷、换向器等易损件,维护成本低。坚固耐用:适合恶劣的工作环境,如农业机械作业现场。宽调速范围:通过适当的控制策略可以实现较宽的速度调节范围。挑战非线性特性:SRM的电磁特性和转矩特性具有高度非线性。复杂性:涉及电气、机械动力学以及控制系统的设计与集成。实时性要求:需要快速响应以适应不断变化的操作条件。多变量优化:包括电流控制、速度控制等多个方面需综合考虑。使用Simscape Electrical库来构建一个开关磁阻电机模型。 阅读详情

相关推荐

基于AXI PCIE IP的FPGA PCIE卡示意图

如果在上图中的AXI互联IP上再连接一个带AXI Slave接口的BRAM控制器,这个BRAM控制器连接一个BRAM,Host PC在系统主存中分配了一些不连续的内存,Host PC可以将这些内存段的起始地址(当然要先转为PCIE总线地址)写到AXI总线上的BRAM中,这样AXI CDMA读取BRAM,将读取到的PCIE总线基地址写到AXIPCIE寄存器块中的AXIBAR2PCIEBAR_n寄存器中,这样就实现了SG DMA。通过动态改变AXIBAR2PCIEBAR_n寄存器的值,可以实现多通道DMA。

csdn_gddf102384398的博客 1624

codevs 2370 小机房的树

codevs 2370 小机房的树 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上。有一天,他们想爬到一个节点上去搞基,但是作为两只虫子,他们不想花费太多精力。已知从某个节点爬到其父亲节点要花费 c 的能量(从父亲节点爬到此节点也相同),他们...

qq_34527468的博客 186

空心杯电机在美容仪器中的应用:为什么你的洗脸刷动力这么强?

本文深入解析了空心杯电机如何成为高端美容仪器的核心动力源。通过对比传统电机,揭示了其无铁芯、低惯量、零齿槽效应的技术优势,从而实现了强劲动力、极致静音与细腻震动的用户体验。文章详细阐述了空心杯电机在洁面刷、导入仪等美容仪器中的具体应用与选型考量,并指出了开发中驱动匹配、测试等关键实战要点。

j2k3l4的博客 1013

Codevs2370 小机房的树

题目大意:给定一棵无根树,树边带权,求树上两点的最近距离。 思路:典型的LCA问题,采用倍增的方法。这里介绍一下倍增法求LCA。记数组fa[i,j]表示节点i向上走2j2^j步所能达到的点,在给出直接的父子u,v时记录下fa[u,0]=v,此后利用fa[i][j]=fa[fa[i][j-1]][j-1]就能得到其它的值。利用dfs获得各个节点的深度dep[ ]。节点u,v在寻找LCA时,令dep[u

Little_Flower_0的博客 1327

深度学习暑期科研项目(两个月发EI论文)

对本科生而言,越早接触系统的科研训练开始上手科研项目,就越能在未来的升学求职中占据很大的优势。暑假是提升个人简历、丰富科研经历的最佳时期!哈尔滨工业大学博士师兄也会在8月1日开始带大家上手科研项目,并撰写发表EI会议论文。

Magnolia_He的博客 1444

蓝桥杯单片机学习13——NE555方波发生器&频率测量

NE555详解、引脚图介绍、原理图及工作原理讲解、方波产生的原理、定时器测量频率的原理及使用方法、代码实现

weixin_67907028的博客 1万+

codevs-2370 小机房的树

2370 小机房的树 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 题目描述Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上。有一天,他们想爬到一个节点上去搞基,但是作为两只虫子,他们不想花费太多精力。已知从某个节点爬到其父亲节点要花费 c...

随风而行的博客 241

【移远EG800K-CN】从AT指令到MQTT实战:4G模块云端通信全解析

本文详细解析移远EG800K-CN 4G模块的AT指令应用与MQTT云端通信实战。从硬件连接到网络配置,再到MQTT协议的数据上报与命令接收,提供了完整的物联网通信解决方案,帮助开发者快速实现设备与云端的稳定数据交互。

o1p2q3r的博客 560

Codevs 2370 小机房的树

2370 小机房的树 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上。有一天,他们想爬到一个节点上去搞基,但是作为两只虫子,他们不想花费太多精力。已知从某个节点爬到

但行好事,莫问前程. 672

VLA-JEPA:具身智能中潜空间世界模型的工程落地实践

世界模型是具身智能实现环境理解与因果推演的核心基础,其本质是在状态空间中建模‘动作→结果’的动力学规律。传统基于像素或文本的世界模型因高维、非平稳、弱语义等缺陷,在真实机器人场景中鲁棒性差、部署成本高。JEPA(联合嵌入预测架构)通过构建物理约束的潜空间,将视觉-语言-动作(VLA)信号统一编码为低维、可微、可解释的状态表征,显著提升模型对抖动、遮挡、光照突变等干扰的适应能力,并支持实时闭环控制。该范式已在UR5e、Franka等多构型机械臂及Jetson边缘平台完成实测验证,成为VLA系统从实验室走向产线

weixin_34357928的博客 336

WPS JS宏智能识别代码段并设置样式(完整可用版)

之前,我们已经经历了多次迭代,解决了许多问题,比如识别代码块、处理多行导入、调整样式等。现在他们需要一份全面的文档来解释整个代码的结构和工作原理。(5)智能行分析(含URL和注解检测优化)function analyzeLineEnhanced(rawText,trimmedText,codeSymbols,codePatterns, singleLinePatterns)该解决方案在保持高性能的同时,提供了良好的可扩展性,能够适应不同组织的代码规范需求,是WPS生态中专业文档处理的创新实践。

搏博的专栏 1826

codevs 2370 小机房的树

2370 小机房的树 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上。有一天,他们想爬到一个节点上去搞基,但是作为两只虫子,他们不想花费太多精力。已知从某个节点爬到其父亲节点要花费 c 的能

Mercury的博客 394

飞腾UEFI配置GPIO—飞腾FT2000/4 (D2000/8) GPIO引脚配置及使用

讲解了在飞腾UEFI代码中如何添加GPIO配置相关代码,并以GPIO1_B0—B7为例,将这8个引脚配置为GPIO工作模式并默认输出低电平

qq_30135687的博客 5349

codevs【2370】小机房的树(LCA)

题目描述 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上。有一天,他们想爬到一个节点上去搞基,但是作为两只虫子,他们不想花费太多精力。已知从某个节点爬到其父亲节点要花费 c 的能量(从父亲节点爬到此节点也相同),他们想找出一条花费精力最短的路,以使得搞基的时候精力旺盛,他们找到你要你设计一个程序来找到这条路,要求你告诉他们最少需要花费...

yj8023xx的博客 207

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【日常学习】【倍增LCA】codevs2370 小机房的树题解

题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上。有一天,他们想爬到一个节点上去搞基,但是作为两只虫子,他们不想花费太多精力。已知从某个节点爬到其父亲节点要花费 c 的能量(从父亲节点爬到此节点也相同),他们想找出一条花费精力最短的路,以使得搞基的时候精力旺盛,他们找到你要你设计一个程序来找到这条

西家家 959

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

CodeVs.2370 小机房的树 ( LCA 倍增 最近公共祖先)

CodeVs.2370 小机房的树 ( LCA 倍增 最近公共祖先)题意分析小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上。有一天,他们想爬到一个节点上去搞基,但是作为两只虫子,他们不想花费太多精力。已知从某个节点爬到其父亲节点要花费 c 的能量(从父亲节点爬到此节点也相同),他们想找出一条花费精力最短的路,以使得搞基的时候精力旺盛,他

Pengwill's Blog 253

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【codevs 2370】小机房的树

这个是题目吗 简单的lca,难度在于给数组命名 个人的想法是记录到根的距离,ans = dis[a] + dis[b] - dis[lca(a,b)] - dis[lca(a,b)] #include <iostream> #include <cstdio&gt...

chuiren0937的博客 102

[codevs2370]小机房的树

题目大意:给你一棵树,要求两个节点间的最短距离。 解题思路:求出每个询问的LCA,然后每次用前缀和减一减就得到答案了。我用的是倍增,在DFS的时候顺便求前缀和就行了。 C++ Code: #include<cstdio> #include<algorithm> #include<cstring> using std::swap; in...

104

codevs2370 小机房的树 x

2370 小机房的树 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上。有一天,他们想爬到一个节点上去搞基,...

anjian3128的专栏 99

【codevs2370】小机房的树 LCA 倍增

2370 小机房的树 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上。有一天,他们想爬到一个节点上去搞基,但是作为...

144

[codevs2370]小机房的树<LCA>

题目链接:http://codevs.cn/problem/2370/ 这题我还是做了比较久了,因为有人告诉我这是用tarjan离线做 好吧算我是蒟蒻,真心不懂tarjan怎么做,最后还是用倍增做的 所以我也就借着这题复习了一下RMQ了。。 思想就是定义两个数组f[i][j],dis[i][j]分别表示从i上升2^j层到达的节点和需要的价值 然后就是让两个询问节点先在统一...

baixunjiu2536的博客 118

codevs 2370小机房的树

先找到他们的最近公共祖先,记下他们的深度(就是花费) 最后的最小花费就是询问的减祖先加起来#include<cstdio> #include<iostream> using namespace std; const int M=1001009; int n,m,s,f[M],vis[M],lca[M*2];int nex[M*2],head[M*2],to[M*2],tot,heade[M*2],

hychychyc 367

CODEVS 2370小机房的树

题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上。有一天,他们想爬到一个节点上去搞基,但是作为两只虫子,他们不想花费太多精力。已知从某个节点爬到其父亲节点要花费 c 的能量(从父亲节点爬到此节点也相同),他们想找出一条花费精力最短的路,以使得搞基的时候精力旺盛,他们找到你要你设计一个程序来找到这条路,...

DancingZ的博客 298

【CodeVS 2370】小机房的树

算法标签:lca

forever_dreams的博客 318
上一篇: HDU 2586 How far away ?【LCA】
下一篇: POJ 1470 Closest Common Ancestors 【LCA】
莜莫oO
博客等级 码龄9年 7粉丝 226原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值