【每日一题】8月3日题目精讲—小A的最短路

来源:牛客网:

文章目录

    • 题目描述
    • 题解:
    • 代码:

时间限制:C/C++ 3秒,其他语言6秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

小A这次来到一个景区去旅游,景区里面有N个景点,景点之间有N-1条路径。小A从当前的一个景点移动到下一个景点需要消耗一点的体力值。但是景区里面有两个景点比较特殊,它们之间是可以直接坐观光缆车通过,不需要消耗体力值。而小A不想走太多的路,所以他希望你能够告诉它,从当前的位置出发到他想要去的那个地方,他最少要消耗的体力值是多少。

输入描述:

第一行一个整数N代表景区的个数。 接下来N-1行每行两个整数u,v代表从位置u到v之间有一条路径可以互相到达。
接下来的一行两个整数U,V表示这两个城市之间可以直接坐缆车到达。 接下来一行一个整数Q,表示有Q次询问。
接下来的Q行每行两个整数x,y,代表小A的位置在x,而他想要去的地方是y。

输出描述:

对于每个询问下x,y输出一个结果,代表x到y消耗的最少体力对于每个询问下x,y输出一个结果,代表x到y消耗的最少体力 示例1

输入
复制

4
1 2
1 3
2 4
3 4
2
1 3
3 4

输出
复制

1
0

备注:
1≤N≤3e5, 1≤Q≤1e6

题解:

如果没有缆车就是lca
但是有了缆车也不怕,我们就考虑(u,v),从u到v是否需要坐缆车。假设缆车是(x,y),u到v远距离是dis(u,v),考虑缆车后就是看u是到x坐还是到y坐
dis(u,x)+dis(y,v)或dis(u,y)+dis(x,v)
看哪个距离最近即可
(复习lca)

代码:

#include<bits/stdc++.h>
#define mp make_pair
#define se second
#define fi first
using namespace std;typedef long long ll;
//typedef pair<int, int> pii;
//typedef pair<ll, int> pli;
//typedef pair<ll, ll> pll;
typedef long double ld;const int N=1e6+10;
const int MAXN=20010;
const int INF=0x3f3f3f3f;
const double eps=0.0000001;
const ll mod=998244353;
int head[N],to[N],nx[N],tot=1;//n个点。n-1条边
int dep[N];
int sz[N];
int fa[N][32];
int n;
void add(int u,int v){to[tot]=v;nx[tot]=head[u];head[u]=tot++;
}
void dfs(int u,int f,int step){dep[u]=step;fa[u][0]=f;sz[u]=1;for(int i=1;i<=21;i++){fa[u][i]=fa[fa[u][i-1]][i-1];}for(int i=head[u];i;i=nx[i]){int v=to[i];if(f==v)continue;dfs(v,u,step+1);sz[u]+=sz[v];}
}
int LCA(int u,int v){if(dep[u]<dep[v])swap(u,v);int d=dep[u]-dep[v];for(int i=0;(1<<i)<=d;i++){if((1<<i)&d){u=fa[u][i];}}if(u==v)return u;for(int i=21;i>=0;i--){if(fa[v][i]!=fa[u][i]){v=fa[v][i];u=fa[u][i];}}return fa[u][0];
}
int main(){int n; scanf("%d",&n);memset(head,-1,sizeof(head));for(int i = 1; i < n; ++i){int u,v;scanf("%d%d",&u,&v);add(u,v);add(v,u);}dfs(1,0,1);int a,b;scanf("%d%d",&a,&b);int q; scanf("%d",&q);while(q--){int u, v;scanf("%d%d",&u,&v);int lca = LCA(u,v);int ans = dep[u] +dep[v] - dep[lca]*2;int x = LCA(u,a);int y = LCA(b,v);ans = min(ans,dep[u] +dep[a] - dep[x]*2 + dep[b] +dep[v] - dep[y]*2);x = LCA(u,b);y = LCA(v,a);ans = min(ans,dep[u] +dep[b] - dep[x]*2 + dep[a] +dep[v] - dep[y]*2);printf("%d\n",ans);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Stack(nowcoder 11253-K)

正题 nowcoder 11253-K 题目大意 有n个数&#xff0c;依次加进栈中&#xff0c;每次加入前将栈顶比aia_iai​大的所有元素弹掉&#xff0c;加入后记bib_ibi​为栈的大小 现在给你b中的一些数&#xff0c;让你求a数组的一种合法方案&#xff0c;其中1~n在a中各出现了一次 解题…

P4424-[HNOI/AHOI2018]寻宝游戏【结论】

正题 题目链接:https://www.luogu.com.cn/problem/P4424 题目大意 nnn个mmm位二进制数&#xff0c;开始是一个000。 然后依次对所有二进制数进行nnn次andandand或者ororor操作。 qqq次询问给出二进制数rir_iri​&#xff0c;要求有多少种操作序列使得操作完后的数是rir_iri​…

ASP.NET Core中使用表达式树创建URL

当我们在ASP.NET Core中生成一个action的url会这样写&#xff1a;var url_urlHelper.Action("Index", "Home");这样的写法存在的问题在于我们传递了两个字符串类型的参数&#xff0c;而我们又无法避免对action和controller做重命名操作, 例如将index重命名…

牛客练习赛 66

A.平方数 讨论一下最接近它的两个平方数即可。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<cmath> #include<iostream> #include<algorithm> using namespace std; typedef long long ll; int main(…

在你的andorid设备上运行netcore (Linux Deploy)

最近注意到.net core 的新版本已经开始支持ARM 平台的CPU, 特意去Linux Deploy 中尝试了一下&#xff0c;真的可以运行 Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.9.65-perf armv8l)* Documentation: https://help.ubuntu.com/Ubuntu 16.04 LTS [running via Linux Deploy]La…

【每日一题】8月6日题目精讲—追债之旅

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 65536K&#xff0c;其他语言131072K 64bit IO Format: %lld文章目录题目描述题解&#xff1a;代码&#xff1a;题目描述 小明现在要追讨一笔债务&#xff0c…

【结论】只不过是长的领带(luogu 6877)

正题 luogu 6877 题目大意 给你n1个数aia_iai​和n个数bib_ibi​&#xff0c;cic_ici​为不选aia_iai​时&#xff0c;重新调整剩下n个数的位置后&#xff0c;∑i1nmax(ai−aj)\sum \limits_{i1}^{n}max(a_i-a_j)i1∑n​max(ai​−aj​)的最小值,求c数组 解题思路 不难发现让…

P3273-[SCOI2011]棘手的操作【线段树,并查集】

正题 题目链接:https://www.luogu.com.cn/problem/P3273 题目大意 nnn个点有权值&#xff0c;要求支持操作 连接两个点单点加权联通块加权全图加权单点询问联通块询问最大值全图询问最大值 解题思路 把所有可能产生的联通块都变到一个区间里就好了 考虑怎么排这个东西&…

牛客练习赛 65 (待补E-网络流)

A.最值序列 排序后&#xff0c;前一半加后一半乘即可。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; typedef long long ll; const int N500010; cons…

持续集成配置之Nuget

Intro本文是基于微软的 VSTS(Visual Studio Team Service) 做实现公众类库的自动打包及发布。之前自己的项目有通过 Github 上的 Travis 和 Appveyor&#xff0c;这次主要是用 VSTS 来做的&#xff0c;对比 appveyor 和 vsts 上的持续集成&#xff0c;vsts 上微软把常用的工具和…

【每日一题】8月7日题目精讲—双栈排序

来源&#xff1a;牛客网 文章目录题目描述题意&#xff1a;题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 131072K&#xff0c;其他语言262144K 64bit IO Format: %lld题目描述 Tom最近在研究一个有趣的排序问…

【期望DP】概率充电器(luogu 4284)

正题 luogu 4284 题目大意 给你棵树&#xff0c;第i个点自己通电的概率是wiw_iwi​&#xff0c;第j条边连接的两个点之间通电的概率是pjp_jpj​&#xff0c;问你通电的点个数的期望值 题目大意 设fif_ifi​为第i个点通电的概率&#xff0c;那么&#xff1a; fisolvej∈link{…

P3760-[TJOI2017]异或和【树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P3760 题目大意 给出nnn个数字的一个序列aaa&#xff0c;求它所有区间和的异或和 n≤105,∑ai≤106n\leq 10^5,\sum a_i\leq 10^6n≤105,∑ai​≤106 解题思路 开始写了个前缀和FFTFFTFFT发现要卡常然后就换了个方法。 每一…

手把手教你搭APM之Skywalking搭建指南(支持Java/C#/Node.js)

前言什么是APM?全称:Application Performance Management可以参考这里:现代APM体系&#xff0c;基本都是参考Google的Dapper&#xff08;大规模分布式系统的跟踪系统&#xff09;的体系来做的。通过跟踪请求的处理过程&#xff0c;来对应用系统在前后端处理、服务端调用的性能…

牛客练习赛 64——错排

A.怪盗-1412 111…1⏟⌊n2⌋444…4⏟m111…1⏟⌈n2⌉222…2⏟k\begin{matrix} \underbrace{ 111\dots\ 1} \\ \lfloor \frac{n}{2} \rfloor \end {matrix}\begin{matrix} \underbrace{ 444\dots\ 4} \\ m \end{matrix}\begin{matrix} \underbrace{ 111\dots\ 1} \\ \lceil \fra…

牛客网状压dp

状压dp 视频链接 &#xff08;如果想购买网课&#xff0c;可以用我的邀请码&#xff09; 用我的链接购买&#xff0c;我再反你10&#xff0c;一共花54多值 购买链接 不放心可以先加我好友2830872914 总试题链接 文章目录状压dp预备知识——位运算例题&#xff1a;引入&#x…

【线段树】海报(loj 3264)

正题 loj 3264 题目大意 有一个环&#xff0c;环上n个点&#xff0c;权值为a&#xff0c;有m次修改&#xff0c;每次修改一个aia_iai​&#xff0c;然后让你选取一些数&#xff0c;使环上不存在连续四个以上的数被选取&#xff0c;让你求所选数的最大权值和 解题思路 不难想…

P4338-[ZJOI2018]历史【LCT】

正题 题目链接:https://www.luogu.com.cn/problem/P4338 题目大意 给出nnn个点的一棵树&#xff0c;和每个点进行accessaccessaccess的次数aia_iai​&#xff0c;要求安排一个顺序使得虚实边转换最多。 mmm次修改一个点让aia_iai​加上www后求答案 n,m∈[1,4∗105],ai,w∈[1,…

小G有一个大树

来源&#xff1a;牛客网 &#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld题目描述 小G想要把自己家院子里的橘子树搬到家门口&#xff08;QAQ。。就当小G是大力水手吧&…

.Net Core功能开关实战

为了快速发布开发完成的功能&#xff0c;企业通常会以比较快的迭代周期持续发布。但是由于某些 原因或场景&#xff0c;需要在发布的时候将某些功能隐藏起来或者小规模的开放&#xff08;例如只有某些特定用户可以使用、或者特定日期开放&#xff09;&#xff0c;通过使用功能开…